Конфигурация структуры карты: один объект, несколько интерфейсов - PullRequest
1 голос
/ 09 июля 2009

У меня есть этот объект "mySessionObject" типа "SessionObject". Он реализует интерфейсы IMessageHandler<MessageA> и IMessageHandler<MessageB>. У меня должен быть только один из этих объектов, и он должен жить через весь сеанс HttpSession.

Как мне зарегистрировать его в Structuremap, чтобы я мог в любой момент времени жизни HttpSession получить его, вызвав ObjectFactory.GetInstance<IMessageHandler<MessageA>>() или ObjectFactory.GetInstance<IMessageHandler<MessageB>>()?

1 Ответ

0 голосов
/ 09 июля 2009

Внутри вашей обычной конфигурации 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 не работает

В данный момент у меня нет компилятора, но я считаю, что CacheBy достаточно умен, чтобы делиться объектами между реализующими классами. Если нет, вы можете создать MyImplementingClass другим способом, а затем использовать TheDefaultIs () вместо TheDefaultIsConcreteType ().

...