0

StructureMap の名前付きシングルトン インスタンス (複数の nHibernate セッション ファクトリ) で説明されているのとまったく同じシナリオがあります。

StructureMap 2.6.2 を使用してこれを実装すると、素晴らしいです。

ただし、最新の .NET フレームワーク バージョンを使用できないレガシー プロジェクトに関連するさまざまな要因と、その他のいくつかの理由により、現在 StructureMap 2.5.4 を使用する必要があります。この質問については、当分の間アップグレードできないと仮定してください。

2.5.4 は明らかに構文が 2.6.2 とはかなり異なり、その API を使用して同じことを実装する方法がわかりません。

具体的には、このようなものです

For<ISessionFactory>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Singleton))
            .Add(context => CreateSessionFactory(@"MyName")).Named("MySessionFactory");
        For<ISession>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Hybrid))
            .Add(context => context.GetInstance<ISessionFactory>("MySessionFactory").OpenSession()).Named("MyName");

For<ISessionFactory>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Singleton))
            .Add(context => CreateSessionFactory(@"My2ndName")).Named("My2ndSessionFactory");
        For<ISession>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.Hybrid))
            .Add(context => context.GetInstance<ISessionFactory>("MySessionFactory").OpenSession()).Named("My2ndName");

...関連する構成を作成する CreateSessionFactory(string) というメソッドを使用します。

"Add" とそれに続く "GetInstance" は無効であり、2.5.4 で動作するようにリファクタリングする必要があります - 私は愚かすぎてどうやって解決するか、または実際に同じことを達成できるかどうかを判断できません。

乾杯

4

1 に答える 1

3

私の記憶では、あなたの構文は 2.5.4 で動作するはずです。2.5.3 の場合、次の構文が機能するはずです。

c.ForRequestedType<ISessionFactory>().CacheBy(InstanceScope.Singleton).
   AddInstances(
     x =>
     {
       x.ConstructedBy(() => CreateSessionFactory("MyName"))
         .WithName("MyName");
       x.ConstructedBy(() => CreateSessionFactory("My2ndName"))
         .WithName("My2ndName");
     });
于 2011-04-04T13:27:59.300 に答える