2011-06-23 22 views
8

Soy totalmente nuevo en Structuremap y estoy confundido sobre cómo cablear una interfaz que tiene múltiples implementaciones.Structuremap: implementaciones de múltiples interfaces

Digamos que tengo Controller1 y Controller2. Tengo Interface1 implementado por dos clases separadas, Class1ForInterface1 y Class2ForInterface1. En Controller1 quiero Class1ForInterFace1 inyectado y en Controller2 Quiero Class2ForInterface1 inyectado.

¿Cómo conecto esto con structuremap? Parece que solo puedo tener un mapeo de la interfaz para el tipo de concreto?

Gracias!

Respuesta

10

Es posible tener varias clases implementando la misma interfaz con structuremap.

Si nombra sus asignaciones, puede recuperarlas con ese nombre más adelante.

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

Si a continuación desea que su Class1ForMyInterface entonces usted puede llamar

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

También hay un par de formas de asignar todo esto en ti contenedor aswell

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

O si se mantiene La información inteligente que se devuelve cuando registra un tipo, puede usarlo en el mapeo.

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