我正在尝试实现一个工厂,该工厂根据调用它的泛型返回一个类。
我目前的工作方式如下:
public static TRepository GetInstance<T, TRepository>()
where TRepository : IRepository<T>, new()
{
return new TRepository();
}
这样称呼:
InvoiceRepository repo = RepositoryFactory.GetInstance<Invoice, InvoiceRepository>();
这有效,但我不必声明返回类型。我想这样称呼它:
InvoiceRepository repo = RepositoryFactory.GetInstance<Invoice>();
这不重要,但它只是困扰我,我很好奇是否有任何明显的解决方案。
答案 0 :(得分:0)
public interface IRepository<T>
{
}
public class Repository<T> : IRepository<T>
{
}
public static class RepositoryFactory
{
public static IRepository<T> GetInstance<T>()
where T : new()
{
return new Repository<T>();
}
}
然后,这样称呼它:
var repo = RepositoryFactory.GetInstance<Invoice>();