我说过十几种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);
}
}
看来我不太了解泛型的反射