2013-08-12 1 views
1

다른 해결 경로를 따라 이름이 지정된 종속성을 단일체로 만드는 방법을 모르겠습니다. 내가Unity IoC - 이름이 지정된 종속성 다른 경로를 확인합니다.

public interface IService 
{ 
    SomeMethod(); 
} 

public class Service : IService 
{ 
    private readonly IRepository repository; 
    public Service(IRepository repository) 
    { 
    this.repository = repository; 
    } 
    public SomeMethod 
    { 
     //some implementation here 
    } 
} 

과 아래에있는 경우 그래서 나는 저장소가 : IRepository, NHibernateContext : INHibernateContext, ISession 등을

내 Global.asax에 옆 할 경우 내 질문은 :

container.RegisterType<IService, Service>("GlobalContext"); 

어떻게하면 "GlobalContext"경로 (기본 등록 된 유형을 사용하지 않음) 내에서 NHibernateContext (또는 다른 계층 적 종속성)를 삽입합니까?

도움을 주셔서 감사합니다.

답변

0

다른 프로젝트에서도 이와 비슷한 필요성이 있었지만 Castle Windsor를 사용하고있었습니다. 내가 지금 할 방법은 일부 응용 프로그램 경로에서 다른 종속성 해결이 필요하므로 하위 컨테이너를 사용합니다.

  1. 아이 컨테이너를 만들고 명명 된 인스턴스로 서로 다른 해상도를
  2. 등록 자식 컨테이너 자체를 가지고 종속성을 등록합니다.
  3. 엔트리 포인트 (내 경우 컨트롤러 팩토리)에서 부모 컨테이너 또는 하위를 통해 해결해야하는지 확인하십시오. 필요한 경우 하위 컨테이너를 확인하고이를 사용하여 계층 체인을 해결합니다. 하위 컨테이너에 등록이 없으면 상위 종속성 해결 프로그램을 사용합니다.
2

이와 같은 이름 지정된 등록을 사용할 때 더 이상 자동 배선에 의존 할 수 없기 때문에 등록에 대해보다 구체적으로 설명해야합니다. 그래서이 있다고 가정 :

container.RegisterType<INHibernateContext, NHibernateContext>("GlobalContext"); 
container.RegisterType<ISession, NHibernateSession>("GlobalContext"); 

을 그리고 당신은 IRepository를 해결하는 경우, "GlobalContext는"당신은 그 특정 종속성을 주입합니다.

container.RegisterType<IRepository, Repository>("GlobalContext", 
    new InjectionConstructor(
     new ResolvedParameter<INHibernateContext>("GlobalContext"), 
     new ResolvedParameter<ISession>("GlobalContext") 
    ) 
); 

이 그 매개 변수를 해결하기 위해, INHibernateContext 및 ISession를 취하는 생성자를 사용하는 용기를 말한다 : 당신은 그 두 개의 매개 변수를 생성자를 가지고 가정, 당신은 명시 적으로 사용할 이름을 컨테이너에게 컨테이너를 통해 GlobalContext 이름을 사용하고이를 해결할 때 GlobalContext 이름을 사용하십시오.

container.RegisterType<IService, Service>("GlobalContext", 
    new ResolvedParameter<IRepository>("GlobalContext") 
); 

그리고 최종 해결 전화 :

container.Resolve<IService>("GlobalContext"); 

당신이 원하는 방식으로 그래프 개체를 구축해야

마찬가지로, 서비스를 연결할 수 있습니다.

+0

감사합니다 @ 크리스, 나는 (내가 4 개 기압 주입 수준을 가지고 있지만, 단지 그것이 더 복잡한 시나리오에있을 것입니다 상상) 별도로 각 InjectionConstructor을 설정하여 전체 사출 계층 구조를 통해 갈 필요가 없습니다 것이라고 기대했다. –

+0

새로운 Unity 3.0 등록 - 대회 규칙에 포함 된 내용이 도움이 될까요? 아직 사용하지 않았으므로 확실하게 말할 수는 없습니다. –

관련 문제