2009-11-07 3 views
0

다중 레이어 응용 프로그램 (ASP MVC : UI 프로젝트, DAL 프로젝트)에서 web.config에 구성 요소를 등록했습니다.Windsor Castle에서 서비스 인스턴스를 얻는 방법

이제이 문제가 있습니다. 작업 단위 패턴이 구현되어 특정 서비스의 현재 인스턴스를 가져와야합니다. 서비스 등록은 UI 프로젝트에서 발생했지만 DAL 프로젝트에서이 서비스의 현재 인스턴스를 가져와야합니다. 이 참조는 어떻게 얻을 수 있습니까? 난 이미 방법을 필요로하는 UI 프로젝트에서

은 뭔가 해결하세요 :

container = new WindsorContainer(
       new XmlInterpreter(new ConfigResource("castle")) 
      ); 
      personRepository= container.Resolve<IPersonRepository>(); 

IT는 DAL 프로젝트에서 동일한 기술을 사용하는 것이 확인 될 것인가? 그렇다면 모든 레이어 (프로젝트)에서 액세스 할 수 있도록 별도의 파일에 구성을 작성해야합니까?

미안하지만이 질문에 대한 답변은 성의가 없지만 성을 사용하는 첫 번째 프로젝트이기 때문에 큰 그림을 이해하지 못한다고 생각합니다.

코드 스 니펫이 많은 도움이됩니다.

미리 감사드립니다.

답변

1

간단히 말해 애플리케이션 당 컨테이너 인스턴스 하나, 애플리케이션에 필요한 모든 구성 요소가있는 컨테이너 구성 하나. DAL에 서비스가 필요한 경우 생성자 (종속성이 이 필요하면이 필요한 경우) 또는 setter (종속성이 인 경우 인 경우)를 통해 DAL 클래스에 적절한 서비스 인터페이스를 삽입하십시오.

정적 IoC 게이트웨이를 사용하지 않으려면 컴포넌트의 진정한 종속성을 숨기고 테스트 가능성을 저해하십시오.

이 관련 질문을 참조하십시오 :

+0

나는 당신의 요점을 본다! 하지만 내가 이해하지 못하는 것은 정확히 이것이 어떻게 이루어져야하는지입니다! DAL은 자체 어셈블리입니다. 그것의 클래스에서 나는 단순히 생성자 매개 변수로 (IWindsorContainer 컨테이너)를 사용합니까? 그렇다면 UI 프로젝트에서 컨테이너 자체를 등록해야합니까? 방법? 또는 다음과 같이 사용할 수 있습니다. WindsorContainer container = new WindsorContainer(); 컨테이너 .resolve (); 이것은 생성자 삽입이 없음을 의미합니다. ... 내가 어떻게하는지에 대한 기술을 이해하지 못한다고 생각합니다! –

+0

아니요 * 직접 컨테이너에 전화하지 마십시오. 그것이 다른 어셈블리인지는 중요하지 않습니다. 여전히 동일한 어플리케이션입니다. 이 프로젝트를 참고로 사용하십시오 : http://code.google.com/p/blogsharp/ –

-3

이 부분은 article입니다. Castle Windsor를 사용하여 종속성 분석을 수행하는 정적 클래스를 작성하는 방법을 보여줍니다. 이 클래스를 UI 및 DAL 프로젝트에서 참조 할 수있는 별도의 프로젝트에 두어 코드 재사용을 고려해야합니다. 이 기사에서 설명한 것처럼 클래스는 IoC 컨테이너를 초기화하는 부트 스트 래퍼 기능을 제공해야한다. 부트 스트 래퍼가 당신의 UI 프로젝트의 Global.asax 파일에서 응용 프로그램 시작 이벤트에서 호출 될

public static class IoC 
{ 
    private WindsorContainer _container; 

    public static void Initialize() 
    { 
     _container = new WindsorContainer(
      new XmlInterpreter(new ConfigResource("castle")) 
     ); 
    } 
} 

: 같은 귀하의 경우,이 보일 것이다.

컨테이너에서 개체의 인스턴스를 얻는 다른 방법은 문서에 따른 것입니다.

+2

이 일을하지 않는 것이 좋습니다하시기 바랍니다. 정적 IoC 게이트웨이는 IoC 적대적인 환경에서 IoC 기능을 사용하기위한 ** 마지막 리소스 **입니다. 대신 일반 DI 관행을 장려해야합니다. –

관련 문제