1

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

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

4

1 回答 1

0

在您的正常 StructureMap 配置中,我将添加以下代码:

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

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

请注意,您将需要此 SO 线程中详述的 2.5.3 StructureMap 版本:StructureMap CacheBy InstanceScope.HttpSession not working

我目前远离编译器,但我相信 CacheBy 足够聪明,可以在实现类之间共享对象。如果没有,您可以用另一种方式构造 MyImplementingClass,然后使用 TheDefaultIs() 而不是 TheDefaultIsConcreteType()。

于 2009-07-09T13:00:06.807 回答