厳しいジェネリック制約を持つ 2 つの型パラメーターを持つジェネリック インターフェイスと、さまざまな組み合わせのいくつかの実装があります。
public interface IResolver<TIn, TOut> where ... {...}
既知の実装のインスタンスを格納する (静的) リゾルバー ファクトリを作成し、次のように処理するだけです。
public static ResolverFactory{
public static IResover<TIn, TOut> GetResolver<TIn, TOut> where ... ()
{
//access some storage dictionary to return the correctly typed instance
}
}
IResover<Entity1, Entity2>
と の両方を格納するようなコンテナを作成するにはどうすればよいIResolver<Entity3, Entity4>
ですか?
私が考えることができる1つのオプションは、次のような別の非ジェネリック「マーカー」インターフェースを使用することです。
public interface IResolver {}
public interface IResolver<TIn, TOut> : IResolver where ....
{...}
と使用
Dictionary<Type, Dictionary <Type, IResolver>> storage;
public RegisterResolver(IResolver resolver)
{
//add to storage - how?
}
しかし、このシナリオは基本的に、ジェネリック パラメーターに課せられた制約を無効にします。また、 を追加する場合IResolver
、 のジェネリック型を取得することIResolver<TIn, TOut>
は多かれ少なかれ不可能です。
これに対するより良い解決策はありますか?