在StructureMap中使用多个nHibernate会话工厂命名单例实例(StructureMap 2.5.4)

时间:2011-03-31 11:35:07

标签: nhibernate structuremap sessionfactory

我有完全相同的情况,如Named singleton instance in StructureMap (Multiple nHibernate session factories)

中所述

如果我使用StructureMap 2.6.2实现这一点 - 太棒了!

但是,我必须使用StructureMap 2.5.4,因为遗留项目中涉及的各种因素无法使用最新的.NET框架版本以及其他一些原因。假设这个问题我无法在可预见的未来升级。

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)的方法创建相关配置。

“添加”和随后的“GetInstance”无效,需要重构才能使用2.5.4 - 我太笨了,无法弄清楚如何,或者确实可以实现同样的事情。

干杯

1 个答案:

答案 0 :(得分: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");
     });