反変型パラメーターを持つインターフェイスがあります。たとえば、次のようになりますIFoo
。
interface IFoo<in T> {}
今、私は3つのクラスを持っています:
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# ベースのアプローチにのみ興味があります...