2011-03-04 66 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方法更加明確。