public static void Main()
var factory = new SomeClassRepoFactory<SomeClass1Repository>();
var createdClass = factory.CreateRepository();
Console.WriteLine(createdClass.GetType());
public interface ISomeClassRepoFactory<T> where T : ISomeClassRepository
public ISomeClassRepository CreateRepository();
public class SomeClassRepoFactory<T> : ISomeClassRepoFactory<T> where T : ISomeClassRepository
public ISomeClassRepository CreateRepository()
case Type someClass1 when someClass1 == typeof(SomeClass1Repository):
return new SomeClass1Repository();
case Type someClass2 when someClass2 == typeof(SomeClass2Repository):
return new SomeClass2Repository();
return new SomeClass1Repository();
public interface ISomeClassRepository {}
public class SomeClass1Repository : ISomeClassRepository {}
public class SomeClass2Repository : ISomeClassRepository {}