我有一个带有逆变类型参数的接口,比如IFoo
:
interface IFoo<in T> {}
现在我有三个班:
class B {}
class D : B {}
class Foo : IFoo<B> {}
如果我这样注册它们
container.RegisterType<IFoo<B>, Foo>();
...然后尝试解决IFoo<D>
,它失败了,因为我没有真正注册IFoo<D>
或IFoo<>
。很明显。
我当前的解决方案只是迭代Registrations
,找到可从解析类型(在我的情况下)RegisteredType
分配的注册,然后解析其类型。IFoo<D>
MappedToType
问题很简单:有没有更好的方法来做到这一点?任何意见,将不胜感激。
谢谢你。
编辑:
多一点上下文。
我有某种映射器。
IMapper<in TSource, in TDest> : IMapper // IMapper is non-generic
{
void Map(TSource source, TDest dest);
}
而且我只想注册基本映射器(在哪里TSource
)IEnumerable<T>
,并且能够为实现的每种类型解析此映射器IEnumerable<T>
,例如T[]
:
object source = GetSource(); // runtime type is T[]
object dest = GetDest();
Type mapperType = typeof(IMapper<,>).MakeGenericType(source.GetType(), dest.GetType());
IMapper mapper = (IMapper) container.Resolve(mapperType);
mapper.Map(source, dest);
是的,我只对基于 Unity/C# 的方法感兴趣......