2011-06-23 51 views
8

私は、Structure Mapが全く新しく、複数の実装を持つインターフェイスの配線方法を混乱させています。Structuremap - 複数のインターフェイスの実装

私は、Controller1Controller2と言います。私はInterface1を持っていて、それは2つの別々のクラス、Class1ForInterface1Class2ForInterface1によって実装されています。 Controller1Class1ForInterFace1を注射してください。Controller2Class2ForInterface1を注射したいです。

これを構造マップに結ぶにはどうすればよいですか?具体的なタイプへのインターフェースのマッピングは1つしかできないようですね。

ありがとうございます!

答えて

10

structmapを使用して同じインターフェイスを実装する複数のクラスを持つことは可能です。

マッピングに名前を付けると、その名前で後で検索することができます。

For<MyInterface>().Add<Class1ForMyInterface>().Named("Class1"); 
For<MyInterface>().Add<Class2ForMyInterface>().Named("Class2"); 

あなたは、あなたのClass1ForMyInterfaceは、あなたが

For<IController>().Add<Controller1>().Ctor<MyInterface>().Is(i => i.GetInstance<MyInterface>("Class1")); 

それとも続ける場合をaswellあなたコンテナ内のすべてのこれをマッピングする方法はいくつもあり

container.GetInstance<MyInterface>("Class1"); 

を呼び出すことができますしたい場合型を登録するときに返されるスマートインパセンスは、マッピングで使用できます。

var class1 = For<MyInterface>().Add<Class1ForMyInterface>().Named("Class1"); 
For<IController>().Add<Controller1>().Ctor<MyInterface>().Is(class1); 
関連する問題