Замок Виндзор - Как отобразить именованный экземпляр в конструктор инъекций

может быть, это легко, но поиск в Интернете уже вызывает у меня головную боль

вот проблема:

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 is Validate I think MyBaseClass.Validate() a common template method pattern isn't it?

Ответы на вопрос(2)

Ваш ответ на вопрос