1

タイプ「SessionObject」のこのオブジェクト「mySessionObject」があります。IMessageHandler<MessageA>インターフェイスと を実装しますIMessageHandler<MessageB>。これらのオブジェクトの 1 つだけを保持し、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.3StructureMapリリースが必要になることに注意してください。StructureMapCacheByInstanceScope.HttpSessionが機能していません

私は現在コンパイラから離れていますが、CacheByは実装クラス間でオブジェクトを共有するのに十分賢いと思います。そうでない場合は、別の方法でMyImplementingClassを作成し、TheDefaultIsConcreteType()ではなくTheDefaultIs()を使用できます。

于 2009-07-09T13:00:06.807 に答える