Я создал общий метод, который позволяет клиентам указать и конкретный тип возвращенного экземпляра и фактический возвращенный тип (например, интерфейс) как независимые параметры типа. Естественно, бетон возвратился, параметр типа экземпляра вынужден наследоваться фактическому возвращенному типу.
Идея состоит в том, что можно возвратить интерфейс из IFactory
(объектная фабрика) Create
метод. Шпора для этого безумия была то, что AutoMapper должен знать, какой конкретный тип инстанцировать на фабрике создают метод, и я определил бы возвращаемое значение фабрики с точки зрения интерфейса.
К сожалению, Вы заканчиваете с вполне смехотворно долгой сигнатурой метода.
Код:
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);
}
Если кто-либо может понять все это, интересно, есть ли у кого-либо что-нибудь, что они могут совместно использовать относительно разделения конкретного типа от возвращенного типа в универсальных интерфейсах, и является ли это во всем стоящим усилием.
Я почти уверен, что понимаю это, но не уверен, что это стоит делать. Предоставляет ли это много преимуществ по сравнению с простым приведением к интерфейсу (или присвоением переменной типа интерфейса) на вызывающей стороне? Я полагаю, это побуждает вас подумать об использовании интерфейса вместо конкретного типа ... но он все равно не будет обеспечивать это: вызывающий может просто указать один и тот же тип дважды.