vielleicht ist das einfach, aber die Suche im Internet bereitet mir schon Kopfschmerzen.
Hier ist das Problem:
%Vor%Irgendeine Idee?
BEARBEITEN
Ich habe ValidatorA
und ValidatorB
mit Named
registriert, jetzt ist das Problem, wie Castle Windsor diese Validierer richtig in ClassA
und ClassB
injizieren kann, gibt es eine Möglichkeit, das zu tun? oder gibt es eine bessere Lösung?
Wenn jemand denkt, dass mein Klassendesign falsch ist, dann bitte ich um Rat. Bisher halte ich es für richtig. Ja, der Validator hat spezifische Konfigurationen für bestimmte Klassen. aber es gibt Gründe, warum es abstrahiert ist:
Validate
ist
MyBaseClass.Validate()
eine gemeinsame Vorlage Methode Muster, nicht wahr? Ohne auf die Details Ihrer gewählten Architektur einzugehen, konzentrieren Sie sich nur auf die Windsor Container-Konfiguration:
Wenn Sie mehrere benannte Implementierungen für eine bestimmte Schnittstelle registriert haben ( IValidator
), können Sie angeben, welche für die Registrierung der Consumer-Klassen ( ClassA
, ClassB
) mit ServiceOverrides
verwendet werden soll:
Die folgenden Containerkonfigurationsanbieter haben eine OtherClass
mit ClassA
Instanz mit einer ValidatorA
und ClassB
Instanz mit einem ValidatorB
:
Scheint, dass Sie versuchen, enge Paare ( ClassA
mit ValidatorA
, ClassB
mit ValidatorB
) als unabhängige Typen in einen gemeinsamen Container zu setzen. Das ist sinnlos. Wenn Sie sich auf eine enge Kopplung wie diese verlassen müssen, vergessen Sie die Abhängigkeitsinjektion in dieser Hinsicht und verweisen Sie nur auf die Typen.
Dies wäre sinnvoller, wenn Sie einen gemeinsamen Validator für alle Klassen implementieren könnten. Machen Sie zum Beispiel die Klassen für die Bereitstellung von Validierungsregeln verantwortlich und lassen Sie Validator
Erzwinge einfach die Regeln. Oder fügen Sie einfach die gesamte Validierung in Ihre Klassen ein, was wahrscheinlich das sinnvollste Szenario ist.
MyBaseClass.Validate()
sehen aus wie eine Inversion der Kontrolle, aber nicht wie eine Template-Methode.
Tags und Links c# castle-windsor