2009-07-08 12 views
1

Ich habe dieses Objekt "mySessionObject" vom Typ "SessionObject". Es implementiert die Schnittstellen IMessageHandler<MessageA> und IMessageHandler<MessageB>. Ich sollte nur eines dieser Objekte haben, und es sollte durch die gesamte HttpSession leben.Strukturkonfiguration: Ein Objekt, mehrere Schnittstellen

Wie registriere ich es mit structuremap, so dass ich es jederzeit in der Lebensdauer der HttpSession erhalten kann, indem Sie ObjectFactory.GetInstance<IMessageHandler<MessageA>>() oder ObjectFactory.GetInstance<IMessageHandler<MessageB>>() anrufen?

Antwort

0

Innerhalb der normalen StructureMap Konfiguration würde ich diesen Code hinzu:

ObjectFactory.Initialize(x => 
{ 
    x.ForRequestedType<IMessageHandler<MessageA>>(). 
     TheDefaultIsConcreteType<MyImplementingClass>(). 
     CacheBy(InstanceScope.HttpSession); 

    x.ForRequestedType<IMessageHandler<MessageB>>(). 
     TheDefaultIsConcreteType<MyImplementingClass>>(). 
     CacheBy(InstanceScope.HttpSession);}); 
} 

Beachten Sie, dass die 2.5.3 StructureMap Release müssen wie in diesem SO Thread beschrieben: StructureMap CacheBy InstanceScope.HttpSession not working

Ich bin Ich bin der Meinung, dass CacheBy intelligent genug ist, um Objekte zwischen implementierenden Klassen zu teilen. Wenn nicht, können Sie eine MyImplementingClass auf andere Weise erstellen und dann TheDefaultIs() anstelle von TheDefaultIsConcreteType() verwenden.

Verwandte Themen