Uso de Singleton de StructureMap (una clase que implementa dos interfaces)

public interface IInterface1 { } public interface IInterface2 { } public class MyClass : IInterface1, IInterface2 { } ... ObjectFactory.Initialize(x => { x.For().Singleton().Use(); x.For().Singleton().Use(); }); var x = ObjectFactory.GetInstance(); var y = ObjectFactory.GetInstance(); 

Obtengo dos instancias MyClass diferentes con el código anterior. ¿Cómo puedo obtener uno?

Puede utilizar el registro Forward <,> () para indicarle a StructureMap que resuelva un tipo usando la resolución de un tipo diferente. Esto debería hacer lo que esperas:

 ObjectFactory.Initialize(x => { x.For().Singleton().Use(); x.Forward(); }); 

Registraría el MyClass mismo y luego lo sacaría del contexto para las declaraciones de uso de las interfaces individuales.

 ForSingletonOf().Use(); For().Use(ctx => ctx.GetInstance()); For().Use(ctx => ctx.GetInstance()); 

Intente ver las diferentes sobrecargas que usa, especialmente la sobrecarga de Func. Desde allí, puede ver cómo StructureMap debería crear su instancia con otro objeto ya registrado.

Un ObjectFactory está destinado a crear múltiples instancias. Si desea un singleton, escriba una clase singleton (tal vez con IInterface1 públicas IInterface1 e IInterface2 como IInterface2 ).

Parece documentado de manera incompleta, pero quizás puedas usar un contenedor en su lugar.