Я скажу дюжину типов T
, которые наследуются от EntityObject
и 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>
для T
Но я застрял, как реализовать это аккуратно, без большого количества отливок.
Есть идеи?
UPDATE:
Раньше я использовал следующий код для обнаружения типов для регистрации их в моем предыдущем сервисном локаторе:
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);
}
}
Кажется, я не совсем понимаю отражение с помощью дженериков