基于通用的工厂具体返回类型

时间:2017-02-22 14:55:04

标签: c# generics factory

我正在尝试实现一个工厂,该工厂根据调用它的泛型返回一个类。

我目前的工作方式如下:

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>();

这不重要,但它只是困扰我,我很好奇是否有任何明显的解决方案。

1 个答案:

答案 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>();