2008-09-15 10 views
1

Je sais comment dire à Castle Windsor de résoudre une référence à partir d'une méthode d'usine en utilisant XML, mais puis-je le faire par programmation via l'interface Container.AddComponent()? Sinon, y a-t-il un autre moyen de le faire à partir du code?Castle Windsor: Comment ajouter un appel à une installation d'usine qui n'est pas en XML?

EDIT: Il semble y avoir une certaine confusion alors laissez-moi clarifier les choses, je suis à la recherche d'un moyen de faire ce qui suit dans le code:

<facilities> 
    <facility 
     id="factory.support" 
     type="Castle.Facilities.FactorySupport.FactorySupportFacility, Castle.MicroKernel" 
    /> 

</facilities> 

<components> 

    <component 
     id="CustomerRepositoryFactory" 
     type="ConsoleApplication2.CustomerRepositoryFactory, ConsoleApplication2" 
    /> 

    <component 
     id="CustomerRepository" 
     service="ConsoleApplication2.ICustomerRepository, ConsoleApplication2" 
     type="ConsoleApplication2.CustomerRepository, ConsoleApplication2" 
     factoryId="CustomerRepositoryFactory" 
     factoryCreate="Create" 
    /> 

</components> 

(from this codebetter article on factory support in windsor and spring.net)

Répondre

3

directement à partir de la Unité de test FactorySupportTestCase (qui sont vos amis):

[Test] 
    public void FactorySupport_UsingProxiedFactory_WorksFine() 
    { 
     container.AddFacility("factories", new FactorySupportFacility()); 
     container.AddComponent("standard.interceptor", typeof(StandardInterceptor)); 
     container.AddComponent("factory", typeof(CalulcatorFactory)); 

     AddComponent("calculator", typeof(ICalcService), typeof(CalculatorService), "Create"); 

     ICalcService service = (ICalcService) container["calculator"]; 

     Assert.IsNotNull(service); 
    } 

    private void AddComponent(string key, Type service, Type type, string factoryMethod) 
    { 
     MutableConfiguration config = new MutableConfiguration(key); 
     config.Attributes["factoryId"] = "factory"; 
     config.Attributes["factoryCreate"] = factoryMethod; 
     container.Kernel.ConfigurationStore.AddComponentConfiguration(key, config); 
     container.Kernel.AddComponent(key, service, type); 
    }