13

[simple-injector] を使用し、テンプレート インターフェイスを使用せずに、複数の具象クラスによって実装される単一のインターフェイスを登録する方法はありますか?

2 つのクラスがMyClass1ありMyclass2、これらのクラスの両方が実装されているとします。IInterface1

[simple-injector] を使用すると、これを行うことができませんでした

container.Register<IInterface1, Myclass1>();
container.Register<IInterface1, Myclass2>();

既存のインターフェイスをテンプレート インターフェイスに変換することは、既存のコードベースでは難しい作業です。もっと簡単なものがあることを願っています。

4

2 に答える 2

18

メソッドを使用して、同じインターフェイスの複数の実装を登録できます(ドキュメントRegisterCollectionを参照してください: 返されるインスタンスのコレクションの構成)

したがって、次のように記述する必要があります。

container.Collection.Register<IInterface1>(typeof(Myclass1), typeof(Myclass2));

そして、Simple Injector はInterface1実装のコレクションをコンストラクターに注入できるようになりました。次に例を示します。

public class Foo
{
    public Foo(IEnumerable<IInterface1> interfaces)
    {
        //...
    }
}

IInterface1または、次の方法で実装を明示的に解決できますGetAllInstances

var myClasses = container.GetAllInstances<IInterface1>();
于 2013-07-26T19:47:32.140 に答える