我说了十几种T
继承自EntityObject
and IDataObject
。
我有以下通用接口
IDataManager<T> where T : EntityObject, IDataObject ...
我还有数据管理器的基类
BaseDataManager<T> : IDataManager<T> where T : EntityObject, IDataObject ....
我有特定的课程
public class Result : EntityObject, IDataObject ....
public class ResultDataManager : BaseDataManager<Result> ...
我想实现服务定位器,它将返回实例IDataManager<T>
for T
但我坚持如何在没有大量铸件的情况下以简洁的方式实现它。
有任何想法吗?
更新:
我曾经使用以下代码来发现类型,以便使用以前的服务定位器注册它们:
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
{
if (type.GetInterface("ISQLDataAccessManager") != null && !type.IsAbstract)
{
var manager = (ISQLDataAccessManager)Activator.CreateInstance(type);
_managers.Add(type, manager);
var typeDO = manager.GetDataObjectType();
_typeNames2Types.Add(typeDO.FullName, typeDO);
_managers2BO.Add(typeDO, manager);
}
}
看来我不太理解泛型的反射