2009-03-23 7 views
7

IOC 컨테이너 (Windsor)에 액세스하려는 클래스가 있지만 정적 IWindsorContainer 속성을 계속 유지하고 싶지는 않습니다. 컨테이너를 갖고 싶습니다. IWindsorContainer를 생성자 종속으로 요구하는 모든 클래스에 자신을 삽입합니다.IWindsorContainer를 클래스의 매개 변수로 사용합니다.

나는 이것을 Unity와 떼어 냈습니다. 그러나 Windsor 컨테이너에서 같은 것을 시도 할 때 IWindsorContainer가 컨테이너에 등록되지 않았다고 알려줍니다.

컨테이너가 새로운 (또는 다른) 인스턴스를 만들어 내 클래스에 전달할 수 있기 때문에 IWindsorContainer => WindsorContainer를 등록 할 수 없다고 생각합니다. 인스턴스에 모두 내 다른 유형은 등록되어 있습니다. 또한 컨테이너를 생성하고 모든 유형을 등록한 다음 IWindsorContainer에 대해 자체 인스턴스를 등록하는 방법을 보지 못합니다. 모든 등록 메소드는 서비스 및 구현을위한 유형을 취합니다. 실제 구체적인 인스턴스는 절대 사용하지 않습니다.

답변

8

일반적으로 응용 프로그램 구성 요소에 컨테이너를 주입하고 싶지는 않습니다.

(이 질문은 그들 중 거의 중복)이 질문을 참조하십시오 :

: 당신은 무료로 IKernel 주사를 얻을, 그리고 너 수 있습니다 레지스터 IWindsorContainer : mausch 말했듯이 당신이 당신의 구성 요소에 컨테이너를 통과하기 전에

container.Register(Component.For<IWindsorContainer>().Instance(container)); 
+0

IKernal이 나를 도와주었습니다. 내 수업 시간에 WindsorContainer 전체가 필요하지 않았습니다. – DavGarcia

1

는 일반적으로 두 번 생각합니다. 정말로에 컨테이너에 액세스해야합니까?

컨테이너에서 종속성을 가져 오려면 typed factories을 사용하십시오.

0

나는 이것을 최근에하고 싶다. 나는 개체의 수명 동안 여러 서비스 인스턴스를 만들 수 있기를 원했습니다. 의존 관계에 대한 필요성이보다 분명 해지면 공장을 등록하는 편이 낫습니다. 그러나 서비스 당 하나의 공장을 만드는 것은 고통스러운 것처럼 보였습니다.

나는이 기사의 코드와 같은 것을 사용했다 : http://mikehadlow.blogspot.com/2010/01/10-advanced-windsor-tricks-1a-delegate.html. IService의 인스턴스를 만들어야하는 클래스가 있다고 가정합니다. 이 기사에서는 클래스가 Func에 대한 의존성을 가질 수있게 해주는 기술에 대해 설명하고 클래스에 맞는 팩토리를 자동으로 가져옵니다.

관련 문제