Structuremap配置:一个对象,多个接口

时间:2009-07-08 21:04:13

标签: structuremap

我有一个“SessionObject”类型的对象“mySessionObject”。它实现了接口IMessageHandler<MessageA>IMessageHandler<MessageB>。我应该只有这些对象中的一个,它应该贯穿整个HttpSession。

如何在结构图中注册它,以便我在HttpSession的生命周期中的任何时间都可以通过调用ObjectFactory.GetInstance<IMessageHandler<MessageA>>()ObjectFactory.GetInstance<IMessageHandler<MessageB>>()来获取它?

1 个答案:

答案 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()。