Castle Windsor - Cómo asignar una instancia con nombre en la inyección del constructor
Tal vez esto sea fácil, pero buscarlo en Internet ya me causa dolor de cabeza
Aquí está el problema:
interface IValidator
{
void Validate(object obj);
}
public class ValidatorA : IValidator
{
public void Validate(object obj) { }
}
public class ValidatorB : IValidator
{
public void Validate(object obj) { }
}
interface IClassA { }
interface IClassB { }
public class MyBaseClass
{
protected IValidator validator;
public void Validate()
{
validator.Validate(this);
}
}
public class ClassA : MyBaseClass, IClassA
{
//problem: validator should ValidatorA
public ClassA(IValidator validator) { }
}
public class ClassB : MyBaseClass, IClassB
{
//problem: validator should ValidatorB
public ClassB(IValidator validator) { }
}
public class OtherClass
{
public OtherClass(IClassA a, IClassB b) { }
}
//on Main
var oc = container.Resolve<OtherClass>();
¿Alguna idea?
EDITAR
estoy registradoValidatorA
yValidatorB
conNamed
, ahora el problema de cómo Castle Windsor puede inyectar esos validadores correctamente en elClassA
yClassB
, ¿Hay una manera de hacerlo? ¿O hay alguna solución mejor?
Si hay alguien que piense que el diseño de mi clase es incorrecto, abro para cualquier consejo. Hasta ahora creo que es correcto. Sí, el validador tiene una configuración específica para la clase específica. Pero hay razones por las que se abstrae:
El validador es un objeto complejo, en algún momento debería conectarse a la base de datos, por lo que DEBO pasar la interfaz en lugar de la implementación al constructor por razones de prueba unitaria.No hay forma de usar una interfaz diferente para ninguno de Validator, porque el único método que usé esValidate
Yo creo queMyBaseClass.Validate()
una comúnmétodo de plantilla patrón no es?