2013-02-23 4 views
1

여러 NHibernate 세션 팩토리를 사용해야하는 MVC 4 애플리케이션을 작성하고 있습니다. AutoFac과 함께이 개체를 이름으로 등록합니다. 내 global.asax있는 모든 세션 팩터 리를 검색하고이를 CurrentSessionContext에 바인드/바인드 해제해야합니다.특정 유형의 모든 AutoFac 구성 요소를 검색하는 방법은 무엇입니까?

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      foreach (ISessionFactory sessionFactory in SessionFactories) 
      { 
       if (!CurrentSessionContext.HasBind(sessionFactory)) 
       { 
        CurrentSessionContext.Bind(sessionFactory.OpenSession()); 
       } 
      } 
     } 

     protected void Application_EndRequest(object sender, EventArgs e) 
     { 
      foreach (ISessionFactory sessionFactory in SessionFactories) 
      { 
       ISession session = CurrentSessionContext.Unbind(sessionFactory); 
       session.Close(); 
       CurrentSessionContext.Unbind(sessionFactory); 
      } 
     } 

나는 AutoFac에서 내 SessionFactories를 검색하는 문제로 실행 해요. 즉, Resolve 메서드를 사용하여 검색하려고하면 빈 컬렉션이 생깁니다. 내가 대신 ResolveNamed 방법을 사용하는 경우, 사물이 작동이 작동하는 동안

SessionFactories = 
       new List<ISessionFactory> 
        { 
         container.ResolveNamed<ISessionFactory>("DB1"), 
         container.ResolveNamed<ISessionFactory>("DB2") 
        }; 

을, 오히려 깨지기 쉬운 것 (모든 이름 변경, 또는 내가 SessionFactories을 추가/제거하는 경우이 코드를 업데이트해야합니다). 명명 된 인스턴스을 포함하는 유형으로 모든 개체를 AutoFac에서 검색하는 방법이 있습니까?

+0

가능한 중복 [autofac : 명명 된 형식의 컬렉션을 해결하는 방법?] (http://stackoverflow.com/questions/5779517/autofac-how-to-resolve-collection-of-named-types) – nemesv

+0

아니요 복제. 참조 된 질문은 명명 된 인스턴스를 해결하는 방법을 묻습니다. 컨테이너 (이름, 키, 익명으로)에 등록 된 방법에 관계없이 유형별로 모든 인스턴스를 해결하는 방법을 묻습니다. –

답변

1

사용

Resolve<IEnumerable<ISessionFactory>>() 추가 정보를 원하시면 Relationship Types를 참조하십시오.

+1

AutoFac은 빈 목록을 반환하지만이를 시도했습니다. –

+0

허, 나는 이름을 가진 등록이 이런 식으로 행동했다는 것을 몰랐다. 만약 당신이' ("name")과 같은 등록을했다면, ()'과 같이 대답 할 수는 있지만, 상황에 맞는 것인지 모르겠습니다. –

관련 문제