StructureMap中命名的单例实例(多个nHibernate会话工厂)

时间:2011-03-04 15:52:55

标签: nhibernate structuremap

我有一个场景,我有两个Nhibernate SessionFactorys我需要注册一个用于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"));

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

我做错了什么?

1 个答案:

答案 0 :(得分:6)

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