El Castillo De Windsor:¿Cómo agregar una llamada a una fábrica de instalación no en xml?
-
09-06-2019 - |
Pregunta
Sé cómo decirle al Castillo de Windsor para resolver una referencia de una fábrica del método para el uso de XML, pero puedo hacerlo mediante programación a través del Contenedor.AddComponent() de la interfaz?Si no hay ninguna otra manera de hacerlo desde el código?
EDITAR: Parece que hay cierta confusión así que permítanme aclarar, estoy buscando una manera de hacer el siguiente 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>
(a partir de este codebetter artículo en apoyo de la fábrica en windsor y spring.net)
Solución
Directamente desde la Unidad de Prueba FactorySupportTestCase (que son sus 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow