2010-01-29 5 views
1

Je veux convertir quelque chose comme ceci:Convertir config xml Château de Windsor à code 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> 

dans le code comme ceci:

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

Quelqu'un a des idées sur la façon de le faire.

Note:

Je suis en train de faire quelque chose comme ce qui est décrit dans ce post, mais sans utiliser XML: Windsor Castle :- Inject Dictionary of Interfaces via configuration

+0

À quoi ressemble le consommateur? Je ne suis pas sûr de comprendre si les services que vous souhaitez injecter sont une liste, un tableau de paramètres, un dictionnaire ou autre chose ... –

Répondre

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")}, 
        } 
       )); 

Voir la fluent API wiki de référence.

+0

J'ai bien travaillé, je devais passer à la dernière version de Castle Windsor pour cela. travail (DynamicParameters n'était pas dans la version que j'avais). – JasonRShaver

+0

De plus, la version API courante du registre 'normal' est: Container.Register (Component.For () .ImplementedBy (). Nommé ("service1")); – JasonRShaver