2011-03-04 68 views
3

我有一个场景,我有两个Nhibernate SessionFactorys需要注册StructureMap。只有Foo需要mySessionFactory会话。在StructureMap中命名的singleton实例(多个nHibernate会话工厂)

像这样:

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这个现在被无处不在的时候我只是想在符使用,其他地方应该用我的未命名实例。

我做错了什么?

回答

5

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