2009-07-08 57 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()。

相关问题