2011-06-23 10 views
8

Jestem całkowicie nowy w Structuremap i jestem zdezorientowany, jak podłączyć interfejs, który ma wiele implementacji.Structuremap - implementacje wielu interfejsów

Powiedzmy, że mam Controller1 i Controller2. Mam Interface1, który jest realizowany przez dwie oddzielne klasy, Class1ForInterface1 i Class2ForInterface1. W Controller1 chcę Class1ForInterFace1 wstrzyknięto i w Controller2 chcę Class2ForInterface1 wstrzyknięto.

Jak połączyć to z mapą struktury? Wygląda na to, że mogę mieć tylko jedno odwzorowanie interfejsu na konkretny typ?

Dzięki!

Odpowiedz

10

Możliwe jest posiadanie kilku klas implementujących ten sam interfejs z mapą struktury.

Jeśli nazwałeś swoje mapowania, możesz je później odebrać z tą nazwą.

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

Jeśli potem chcesz, żeby Twój Class1ForMyInterface następnie możesz zadzwonić

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

Istnieje również kilka sposobów na mapie w tobie pojemnika aswell

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

lub jeśli trzymać Smartinsatance, która jest zwracana po zarejestrowaniu typu, możesz go użyć w odwzorowaniu.

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