这似乎是一个基本问题,但我正在努力(可能是因为疲倦)。
E.g。 - 如果我像这样创建存储库实例=>
var repositoryType = typeof(Repository<>).MakeGenericType(entityType);
// repository type==object :(
var repository = ServiceLocator.Current.GetInstance(repositoryType);
调用repository.All()
方法的最佳方式是什么?反思是唯一的方式吗?
答案 0 :(得分:3)
取决于Repository<>
是否公开了一些非泛型接口(如ITable
与LINQ-to-SQL中的Table<T>
相比)。如果没有,你必须使用反射。如果它 ,则转换为非通用接口:
IRepository repository = (IRepository)ServiceLocator
.Current.GetInstance(repositoryType);
IList data = repository.All();
在4.0中,您还可以考虑dynamic
:
dynamic repository = ServiceLocator.Current.GetInstance(repositoryType);
IList data = repository.All();
答案 1 :(得分:1)
在.Net 3.5中,如果没有反思或更糟糕,就无法做到这一点。