我有一个接口/类的映射层次结构,它使用基类约束的泛型,我试图使用基类将它们解析为它们的派生类。我想知道Autofac是否能以比我目前更好的方式解决这个问题。Autofac - 按基类解析泛型
采取以下结构:
public interface IMapper<T1, T2>
where T1 : FooBase
where T2 : BarBase
{
T1 Map(T2 source);
}
public class FooBarMapper : IMapper<Foo, Bar>
{
public Foo Map(Bar source)
{
return new Foo
{
blahblah = source.xyz
};
}
}
接下来,我对“富”,它引用了基本类型A“到”扩展方法,但我想它解析为一个适当的类型。我目前这样解决:
public static TDest To<TDest>(this BarBase o) where TDest : FooBase
{
var genericMapper = typeof(IMapper<,>).MakeGenericType(o.GetType(), typeof(TDest));
object mapper = IocProxy.Container.Resolve(genericMapper);
//... etc
}
这解决了罚款...但映射只是一个对象。所以我不得不使用反射来点击“Map”方法。我宁愿避免这样做。 autofac能否以更好的方式做到这一点,以便最终获得IMapper而不是对象?例如,我宁愿做这样的事情,但autofac显然不能解决它:
var mapper = IocProxy.Container.Resolve<IMapper<FooBase, TDest>>();