Castelo Windsor:Como você adiciona uma chamada a uma instalação de fábrica que não está em xml?
-
09-06-2019 - |
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)
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