0
我想实现一个工厂,该工厂基于调用的泛型返回一个类。基于通用的工厂混凝土返回类型
我现在有它的工作是这样的:
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>();
这不是真的很重要,但它只是困扰我,我如果有任何明显的解决方案好奇。
哪种类型应该在工厂建设?它应该搜索加载的程序集中实现“IRepository”接口的类型吗? –
不知道这是否是一个修辞问题,但是是的,它应该返回IRepository的实现,因为它们中只有一个。 e:我仍然是一名学生,很可能我有点遗忘某些可能对其他人显而易见的事情。 –
ihendriks
您可以在工厂中创建一个专用字典('Dictionary'),它映射不同'T'及其相应的存储库类型。然后,当您被要求构建存储库时,可以使用字典来获取存储库的类型,然后使用反射来构建存储库类型。 –