2011-06-23 83 views
8

我對Structuremap完全陌生,並且對如何連接具有多個實現的接口感到困惑。Structuremap - 多接口實現

可以說我有Controller1Controller2。我有Interface1,由兩個不同的類實現,Class1ForInterface1Class2ForInterface1。在Controller1我想Class1ForInterFace1注入,並在Controller2我想Class2ForInterface1注入。

如何將此線與結構圖結合使用?看來,我只能有一個接口到具體類型的映射?

謝謝!

回答

10

有可能有幾個類與結構圖實現相同的接口。

如果你命名你的映射,你可以稍後用這個名稱來回顧它們。

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

如果你那麼想你Class1ForMyInterface那麼你可以調用

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

還有一個藏漢

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

或者,如果你把幾個方法來映射這一切都在你的容器在註冊類型時返回的smartinsatance,您可以在映射中使用它。

var class1 = For<MyInterface>().Add<Class1ForMyInterface>().Named("Class1"); 
For<IController>().Add<Controller1>().Ctor<MyInterface>().Is(class1);