tal vez esto es fácil, pero buscando en el internet ya dame un dolor de cabezaCastillo de Windsor - ¿Cómo asignar instancia de nombre en la inyección de constructor
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
Me he registrado y ValidatorA
ValidatorB
con Named
, ahora el problema de cómo el castillo de Windsor puede inyectar los validador correctamente a la ClassA
y ClassB
, hay una manera de hacer eso? o hay alguna mejor solucion?
si alguien piensa que el diseño de mi clase es incorrecto, por favor, abro para cualquier consejo. Hasta ahora creo que es correcto. Sí, el validador tiene una configuración específica para una Clase específica. pero hay razones por las que se abstrae:
- El validador es un objeto complejo, en algún momento debe conectarse a la base de datos, así que DEBO pasar la interfaz en lugar de la implementación al constructor para probar la unidad.
- No hay manera de usar interfaz diferente para cualquiera de Validador, porque el único método que he utilizado es
Validate
- creo
MyBaseClass.Validate()
una plantilla común método patrón no es así?
Tu descripción del problema es abstracta. –
Si ClassA requiere una implementación específica de IValidator, entonces el diseño es incorrecto, ya que la interfaz no proporciona abstracción útil. –
@Jacek Grogon, no solo necesito el método 'Validate', en realidad hay una clase base de ClassA y ClassB que se llama método' Validate'. pero no lo escribo aquí solo para ocultar la complejidad. – ktutnik