【问题标题】:Named singleton instance in StructureMap (Multiple nHibernate session factories)StructureMap 中的命名单例实例(多个 nHibernate 会话工厂)
【发布时间】:2011-03-04 15:52:54
【问题描述】:

我有一个场景,我有两个 Nhibernate SessionFactory,我需要使用 StructureMap 注册一个用途。只有 Foo 需要 mySessionFactory 会话。

像这样:

For<ISessionFactory>().Singleton().Use(NHibernateConfiguration.GetDefaultSessionFactory());
For<ISession>().HybridHttpOrThreadLocalScoped().Use(x => x.GetInstance<ISessionFactory>().OpenSession());
For<ISessionFactory>().Singleton().Use(AnotherNHibernateConfiguration.GetDefaultSessionFactory).Named("mySessionFactory");
For<ISession>().HybridHttpOrThreadLocalScoped().Use(x => x.GetInstance<ISessionFactory>("mySessionFactory").OpenSession()).Named("mySession");

For<Foo>()
   .Use<Foo>()
   .Ctor<ISession>("session").Is(x => x.TheInstanceNamed("mySession"));

问题是,当我只想在 Foo 中使用 mySessionFactory 时,现在到处都在使用 mySessionFactory,而其他任何地方都应该使用我的未命名实例。

我做错了什么?

【问题讨论】:

    标签: nhibernate structuremap


    【解决方案1】:

    在您的两个命名实例上,将 Use 更改为 Add。使用将该实例设置为默认值并将其添加为实例。您还可以颠倒配置的顺序(使用 Use 添加的类型的最后一个实例将成为默认值),但使用 Add 方法更加明确。

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多