2011-03-04 4 views
3

StructureMap에 사용을 등록해야하는 두 개의 Nhibernate SessionFactory가있는 시나리오가 있습니다. Foo 만 mySessionFactory 세션이 필요합니다. 이처럼StructureMap에서 명명 된 싱글 톤 인스턴스 (다중 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

명명 된 인스턴스 모두에서 UseAdd으로 변경하십시오. Use는 인스턴스를 기본값으로 설정하고 인스턴스로 추가합니다. 또한 설정 순서를 바꿀 수도 있습니다 (Use로 추가 된 유형의 마지막 인스턴스가 기본값이됩니다). Add 메소드를 사용하는 것이 훨씬 더 명확합니다.