【问题标题】:Named singleton instance in StructureMap with multiple nHibernate Session factories (StructureMap 2.5.4)具有多个 nHibernate 会话工厂的 StructureMap 中的命名单例实例 (StructureMap 2.5.4)
【发布时间】:2011-07-26 19:55:24
【问题描述】:

我有与Named singleton instance in StructureMap (Multiple nHibernate session factories)中描述的完全相同的场景

如果我使用 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 一起使用 - 我太笨了,无法弄清楚如何实现,或者您是否确实可以实现相同的目标。

干杯

【问题讨论】:

  • 我应该通过使用“Use”和“WithName”来补充一点——它不能正常工作——这是我尝试的第一件事。

标签: nhibernate structuremap sessionfactory


【解决方案1】:

我记得你的语法应该在 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");
     });

【讨论】:

  • 谢谢 - 这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多