Замок Виндзор - Как отобразить именованный экземпляр в конструктор инъекций
может быть, это легко, но поиск в Интернете уже вызывает у меня головную боль
вот проблема:
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>();
Любая идея?
EDIT
Я зарегистрировалValidatorA
а такжеValidatorB
сNamed
Теперь проблема в том, как Castle Windsor может правильно ввести эти валидаторы вClassA
а такжеClassB
, Есть способ сделать это? или есть лучшее решение?
если есть кто-то, кто думает, что мой классный дизайн неправильный, пожалуйста, я открыт для любых советов. Пока я думаю, что это правильно. Да, валидаторы имеют конкретную конфигурацию для определенного класса. но есть причины, по которым он абстрагируется:
Validator is a complex object, sometime should connect to database, so I MUST pass interface instead of implementation to constructor for unit testing reason. No way to use different interface for any of Validator, because the only method that i used isValidate
I think MyBaseClass.Validate()
a common template method pattern isn't it?