我有一个“SessionObject”类型的对象“mySessionObject”。它实现了接口IMessageHandler<MessageA>
和IMessageHandler<MessageB>
。我应该只有这些对象中的一个,它应该贯穿整个HttpSession。
如何在结构图中注册它,以便我在HttpSession的生命周期中的任何时间都可以通过调用ObjectFactory.GetInstance<IMessageHandler<MessageA>>()
或ObjectFactory.GetInstance<IMessageHandler<MessageB>>()
来获取它?
答案 0 :(得分: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 SOS结构图版本,详见本SO主题:StructureMap CacheBy InstanceScope.HttpSession not working
我现在远离编译器,但我相信CacheBy足够聪明,可以在实现类之间共享对象。如果没有,您可以用另一种方式构造MyImplementingClass,然后使用TheDefaultIs()而不是TheDefaultIsConcreteType()。