Castle Windsor - Jak odwzorować nazwaną instancję w iniekcji konstruktora
może to jest łatwe, ale przeszukiwanie go w Internecie już mnie boli
oto problem:
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>();
Dowolny pomysł?
EDYTOWAĆ
ZarejestrowałemValidatorA
iValidatorB
zNamed
, teraz problem z tym, jak Castle Windsor może poprawnie wprowadzić ten walidator doClassA
iClassB
, czy jest na to sposób? czy jest jakieś lepsze rozwiązanie?
jeśli ktoś myśli, że mój projekt klasy jest zły, proszę o radę. Do tej pory myślę, że to poprawne. Tak, walidator ma specyficzną konfigurację dla określonej klasy. ale są powody, dla których jest to abstrakcyjne:
Validator jest obiektem złożonym, czasem powinien łączyć się z bazą danych, więc MUSZĘ przekazać interfejs zamiast implementacji do konstruktora dla powodu testowania jednostki.Nie ma możliwości użycia innego interfejsu dla żadnego Validatora, ponieważ jedyną metodą, której użyłem, jestValidate
MyślęMyBaseClass.Validate()
powszechnymetoda szablonu wzór nie jest?