Castelo Windsor:Como você adiciona uma chamada a uma instalação de fábrica que não está em xml?

StackOverflow https://stackoverflow.com/questions/64238

Pergunta

Eu sei como dizer ao Castle Windsor para resolver uma referência de um método de fábrica usando XML, mas posso fazer isso programaticamente por meio da interface Container.AddComponent()?Caso contrário, existe alguma outra maneira de fazer isso a partir do código?

EDITAR:Parece haver alguma confusão, então deixe-me esclarecer, estou procurando uma maneira de fazer o seguinte no código:

<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>

(deste artigo do codebetter sobre suporte de fábrica em windsor e spring.net)

Foi útil?

Solução

Diretamente do Unit Test FactorySupportTestCase (que são seus amigos):

[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);
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top