Castle Windsor - Zuordnen einer benannten Instanz in der Konstruktorinjektion
Vielleicht ist das einfach, aber die Suche im Internet bereitet mir schon Kopfschmerzen
hier ist das 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>();
Irgendeine Idee?
BEARBEITEN
Ich registrierteValidatorA
undValidatorB
mitNamed
, jetzt das Problem, wie Castle Windsor diesen Validator richtig in den injizieren kannClassA
undClassB
gibt es eine möglichkeit das zu tun? oder gibt es eine bessere lösung?
Wenn es jemanden gibt, der mein Klassendesign für falsch hält, bitte ich um Rat. Soweit ich es richtig finde. Ja, der Validator hat eine spezifische Konfiguration für eine spezifische Klasse. Aber es gibt Gründe, warum es abstrahiert wird:
Validator ist ein komplexes Objekt und sollte manchmal eine Verbindung zur Datenbank herstellen. Daher MUSS ich die Schnittstelle anstelle der Implementierung aus Gründen des Komponententests an den Konstruktor übergeben.Keine Möglichkeit, eine andere Schnittstelle für Validator zu verwenden, da die einzige Methode, die ich verwendet habe, istValidate
Meiner Ansicht nachMyBaseClass.Validate()
eine gemeinsameTemplate-Methode Muster nicht wahr?