【发布时间】:2011-03-22 21:57:34
【问题描述】:
我创建了一个通用方法,它使客户端能够将返回实例的具体类型和实际返回类型(例如接口)指定为独立的类型参数.当然,具体返回的实例类型参数被限制为从实际返回的类型继承。
这个想法是您可以从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);
}
如果有人能理解这一切,我想知道是否有人可以分享关于泛型接口中具体类型与返回类型的分离,以及这是否值得努力。
【问题讨论】:
-
这看起来像是工厂工厂的一部分(discuss.joelonsoftware.com/default.asp?joel.3.219431.12)。
-
如果你的函数中只有一个类型为 TDestination 的参数(或一些以 TDestination 作为泛型参数的泛型类型),那么编译器可能会让你调用该函数而无需显式指定泛型参数的类型(假设它可以从你的参数中推断出类型)。
-
...这可能使它几乎可用。我会研究修改它。
标签: c# generics .net-3.5 c#-3.0