2010-01-29 64 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

消费者看起来像什么?我不太确定我了解你想要注入的服务是列表,参数阵列,字典还是其他的... – 2010-01-30 09:55:18

回答

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 2010-02-03 20:14:07

+0

此外,流畅的API版本的'普通'寄存器是: Container.Register(Component.For ().ImplementedBy ()。Named(“service1”)); – JasonRShaver 2010-02-03 20:15:41