2010-03-29 24 views
7

Pregunta nueva de StructureMap.StructureMap: cómo registrar la misma instancia para todas sus interfaces

public class SomeClass: IInterface1, IInterface2 { 
} 

Me gustaría que la siguiente prueba para pasar:

Assert.AreSameInstance(
    container.GetInstance<IInterface1>(), 
    container.GetInstance<IInterface2>()); 

¿Cómo puedo hacer un registro explícito de esta?

Sé que en el castillo de Windsor Me gustaría hacer algo como

kernel.Register(Component.For(typeof(IInterface1), typeof(IInterface2)) 
    .ImplementedBy(typeof(SomeClass)); 

Pero no veo ninguna API equivalente

+1

Se adhieren a Windsor :) –

+0

No sería que acaba de decirle que se instanciarlos como Singleton? – Jaxidian

+0

Bueno ... sí, pero ¿cómo obtener la misma instancia singleton para implementar cada interfaz? Para ser claros, solo una instancia de SomeClass debe ser instanciada alguna vez. –

Respuesta

15
ObjectFactory.Initialize(x => 
{ 
    x.For<IInterface1>().Singleton().Use<MyClass>(); 
    x.Forward<IInterface1, IInterface2>(); 
}); 
+0

Awesome thanks Phil! –

+0

Consejo: Si esto no funciona, asegúrese de tener los dos parámetros de tipo Adelante() en el sentido correcto. Me sorprendió al suponer que era el tipo de complemento "alternativo" primero. – Schneider

Cuestiones relacionadas