2012-05-10 5 views
0

저는 Windsor를 처음 사용했으며 가장 기본적인 생성자 주입을 구현하려고합니다. 외관상으로는 API는 최신 버전에 비해 많이 바뀌었기 때문에 현재 버전의 문서는 이미 알고있는 것으로 가정하고 이전 버전의 문서는 구형입니다.기본 Windsor 생성자 삽입

public class ConstructorInjectedComponent 
{ 
    public IMyComponent Component { get; set; } 

    public ConstructorInjectedComponent(IMyComponent component) 
    { 
     Component = component; 
    } 
} 

IMyComponent의 간단한 구현 있습니다 :

나는 간단한 테스트 구성 요소가

public class AMyComponent : IMyComponent 
{ 
    public string Name { get; set; } 

    public AMyComponent() 
    { 
     Name = Guid.NewGuid().ToString("N"); 
    } 
} 

을 그리고 난 어떻게 든 되돌려를 얻을 수 있도록 윈저 내 유형을 등록 할 종속성의 인스턴스를 포함하는 ConstructorInjectedComponent의 인스턴스입니다 (IMyComponent). 나는이 같은 ConstructorInjectedComponent를 등록했습니다

_container.Register(Component.For(typeof(AMyComponent))); 

을 :

그래서 같은 AMyComponent를 등록했습니다

_container.Register(Component.For(typeof(ConstructorInjectedComponent))); 

_container.Resolve(typeof(ConstructorInjectedComponent)); 

그러나 실패와 그것을 해결하기 위해 시도 함께 "필요한 수의 종속성을 가지고 있기 때문에 ConstructorInjectedComponent 구성 요소를 만들 수 없습니다 만족.

그래서 ConstructorInjectedComponent ...에 대한 IDictionary를 전달하려고합니다. 그리고이 문서는 저를 실패시킵니다.

나는 그 사전을 정의하는 방법을 모른다. 그것을 설명하는 문서를 찾을 수 없습니다. 나는이 시도했다 :

var d = new Dictionary<string, string>() {{"IMyComponent", "AMyComponent"}}; 
_container.Register(Component.For(typeof(ConstructorInjectedComponent)) 
        .DependsOn(dependencies)); 

그러나이 같은 실패 오류 "해결해야 할 종속성이".

내가 뭘 잘못하고 있니?

답변

6

먼저 구성 요소가 무엇인지, 서비스가 무엇인지, 종속성이 무엇인지 등에 대한 기본적인 개념을 이해하는 것이 중요합니다.

The documentation about it is quite good.

documentation about how to use registration API은 도움이 될 것입니다.

는 TL; 박사 asnwer은 다음과 같습니다 ConstructorInjectedComponentIMyComponent에 따라 때문에 당신이 서비스IMyComponent을 노출 AMyComponent를 등록해야합니다.

_container.Register(Component.For<IMyComponent>().ImplementedBy<AMyComponent>());