Я создал универсальный метод, который позволяет клиентам указывать как конкретный тип возвращаемого экземпляра, так и фактический возвращаемый тип (например, интерфейс) в качестве параметров независимого типа. Естественно, конкретный возвращаемый параметр типа экземпляра ограничен для наследования от фактического возвращаемого типа.
Идея состоит в том, что вы можете вернуть интерфейс из метода IFactory
(фабрика объектов) Create
. Побуждение к этому безумию заключалось в том, что AutoMapper должен знать, какой конкретный тип создавать в методе фабрики create, и я бы лучше определил возвращаемое значение фабрики в терминах интерфейса.
К сожалению, в итоге вы получите довольно смехотворно длинную сигнатуру метода.
Код:
public static TDestinationBase
MapToDomain<TSource, TDestinationBase, TDestination>
(this TSource source, IFactory<TSource, TDestinationBase> factory)
where TSource : IMappable<TDestination>, IDto
where TDestination : TDestinationBase
{
return factory.Create<TDestination>(source);
}
Если кто-то может понять все это, мне интересно, есть ли у кого-нибудь что-то, чем он может поделиться в отношении отделения конкретного типа от возвращаемого типа в универсальных интерфейсах и является ли это стоящим делом.