我有一個接口/類的映射層次結構,它使用基類約束的泛型,我試圖使用基類將它們解析爲它們的派生類。我想知道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>>();