2009-07-08 23 views
1

我有這個類型爲「SessionObject」的對象「mySessionObject」。它實現了接口IMessageHandler<MessageA>IMessageHandler<MessageB>。我應該只有這些對象中的一個,它應該貫穿整個HttpSession。結構圖配置:一個對象,多個接口

我該如何註冊它與結構圖,以便我在HttpSession的生命週期中的任何時候都可以通過調用ObjectFactory.GetInstance<IMessageHandler<MessageA>>()ObjectFactory.GetInstance<IMessageHandler<MessageB>>()得到它?

回答

0

內您的正常StructureMap的配置,我想補充一點代碼:

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

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

請注意,您將需要2.5.3 StructureMap發佈在本SO線程詳細:StructureMap CacheBy InstanceScope.HttpSession not working

我遠離編譯器,但我相信CacheBy足夠聰明,可以在實現類之間共享對象。如果不是,則可以另一種方式構造MyImplementingClass,然後使用TheDefaultIs()而不是TheDefaultIsConcreteType()。

相關問題