2010-01-29 5 views
1

에 성 윈저의 XML 설정을 변환 :내가 이런 식으로 뭔가를 변환 할 C# 코드

<components> 
    <component id=""service1"" service=""WindsorTests.IService, MyAssembly""   type=""WindsorTests.Service1, MyAssembly""/> 
    <component id=""service2"" service=""WindsorTests.IService, MyAssembly"" type=""WindsorTests.Service2, MyAssembly""/> 
    <component id=""consumer"" type=""WindsorTests.Consumer, MyAssembly""> 
     <parameters> 
      <services> 
       <dictionary> 
        <entry key=""one"">${service1}</entry> 
        <entry key=""two"">${service2}</entry> 
       </dictionary> 
      </services> 
     </parameters> 
    </component> 
</components> 

코드에 다음과 같이 :

Container.AddComponentWithProperties<Consumer>(Container.ResolveAll<IService>()); 

누구든지 방법이 작업을 수행하는 어떤 아이디어를 가지고있다.

참고 :

나는이 게시물에 설명되어 어떤 식으로 뭔가를하려고하지만, XML을 사용하지 않고 오전 : Windsor Castle :- Inject Dictionary of Interfaces via configuration

+0

소비자는 어떻게 생겼습니까? 나는 당신이 주입하고자하는 서비스가 목록, 매개 변수 배열, 사전 또는 다른 어떤 것인지 이해하지 못합니다 ... –

답변

2
container.Register(Component.For<Consumer>() 
       .DynamicParameters((kernel, parameters) => 
        parameters["services"] = new Dictionary<string, IService> { 
        {"one", kernel.Resolve<IService>("service1")}, 
        {"two", kernel.Resolve<IService>("service2")}, 
        } 
       )); 

참조에 대한 fluent API wiki를 참조하십시오.

+0

잘했는데, 이것을 위해 Castle Windsor의 최신 버전으로 업그레이드해야했습니다. (DynamicParameters는 내가 가지고 있던 버전이 아니 었습니다). – JasonRShaver

+0

또한 '일반'레지스터의 유창 API 버전은 다음과 같습니다. Container.Register (Component.For () .ImplementedBy (). Named ("service1")); – JasonRShaver

관련 문제