Structuremap配置:一个对象,多个接口
我有一个类型为“SessionObject”的对象“mySessionObject”。它实现了接口Structuremap配置:一个对象,多个接口,structuremap,Structuremap,我有一个类型为“SessionObject”的对象“mySessionObject”。它实现了接口IMessageHandler和IMessageHandler。我应该只有其中一个对象,它应该贯穿整个HttpSession 如何在structuremap中注册它,以便在HttpSession生命周期中的任何时候都可以通过调用ObjectFactory.GetInstance(),或ObjectFactory.GetInstance(),来获取它 在您的常规StructureMap配置中,我将添加
IMessageHandler
和IMessageHandler
。我应该只有其中一个对象,它应该贯穿整个HttpSession
如何在structuremap中注册它,以便在HttpSession生命周期中的任何时候都可以通过调用
ObjectFactory.GetInstance()
,或ObjectFactory.GetInstance()
,来获取它 在您的常规StructureMap配置中,我将添加以下代码:
ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IMessageHandler<MessageA>>().
TheDefaultIsConcreteType<MyImplementingClass>().
CacheBy(InstanceScope.HttpSession);
x.ForRequestedType<IMessageHandler<MessageB>>().
TheDefaultIsConcreteType<MyImplementingClass>>().
CacheBy(InstanceScope.HttpSession);});
}
ObjectFactory.Initialize(x=>
{
x、 ForRequestedType()。
默认的混凝土类型()。
CacheBy(InstanceScope.HttpSession);
x、 ForRequestedType()。
默认混凝土类型>()。
CacheBy(InstanceScope.HttpSession);});
}
请注意,您将需要2.5.3 StructureMap版本,详见本SO线程:
我目前不使用编译器,但我相信CacheBy足够聪明,可以在实现类之间共享对象。如果没有,您可以用另一种方法构造MyImplementingClass,然后使用default()而不是defaultsConcreteType()