Wie ermittelt Castle Windsor, welcher Konstruktor aufgelöst werden soll, wenn mehrere Konstruktoren vorhanden sind?Wie lautet die Reihenfolge der Konstruktorauflösung?
Antwort
Alle verfügbaren Konstruktoren sind als Kandidaten modelliert und im Grunde wird ein Wettbewerb unter ihnen ausgeführt.
Jeder Parameter in einem Konstruktor stellt eine Abhängigkeit dar, die entweder erfüllt sein kann oder nicht. Für jeden Konstruktkandidaten werden alle Abhängigkeiten analysiert.
Wenn eine Abhängigkeit erfüllt werden kann, sind das zwei Punkte für den Kandidaten. Wenn es nicht erfüllt werden kann, werden zwei Punkte vom Kandidaten abgezogen.
Der Konstruktorkandidat mit den meisten Punkten gewinnt und wird ausgewählt, um die Komponente zu instanziieren.
Der Code für diesen Algorithmus lautet here.
Castle Windsor verwendet den Konstruktor mit den meisten Parametern, deren Abhängigkeiten aufgelöst werden können.
Wenn es zwei Konstruktoren mit der gleichen Anzahl von Parametern gibt, die Windsor auflösen kann, war das Verhalten scheinbar willkürlich, wurde aber möglicherweise behoben.
Sehen Sie diese post von Krzysztof Kozmic
- 1. Wie lautet die Reihenfolge des Konstruktoraufrufs in der virtuellen Vererbung?
- 2. cloud-init: Wie lautet die Ausführungsreihenfolge der cloud-config-Anweisungen?
- 3. Wie lautet die Standardcodierung der JVM?
- 4. Wie lautet die Aufrufreihenfolge der angularjs-Funktionen (config/run/controller)?
- 5. Wie lautet der Name?
- 6. Wie lautet die Reihenfolge der Datensätze in einer Tabelle mit einem zusammengesetzten Primärschlüssel
- 7. Wie lautet die korrekte Reihenfolge der Platzierung dieser Codezeilen in PHP?
- 8. Wie lautet der Name dieses Problems?
- 9. Wie lautet die Cookie-Punktregel?
- 10. Wie lautet die Editor-URL?
- 11. Wie lautet die LINQ'sche Methode?
- 12. Wie lautet der GOMAXPROCS-Standardwert
- 13. Wie lautet der SQL-Indexname?
- 14. Ändern Reihenfolge der Reihenfolge Wörterbuch in Python
- 15. Wie lautet der Status der Javascript-Sprache?
- 16. Wie lautet der Name in der Programmierung?
- 17. Wie lautet die richtige Reihenfolge der UIViewController-Eindämmungsnachrichten, die ich senden muss, wenn ich transitionFromViewController nicht verwende?
- 18. Wie wird die Reihenfolge der Stringnamen umgekehrt?
- 19. Wie normalisiert man die Reihenfolge der Zahlen?
- 20. Hat die Reihenfolge der groupby output entschieden?
- 21. Wie lautet die richtige Reihenfolge dieser Klauseln beim Schreiben einer SQL-Abfrage?
- 22. Wie lautet die Standardliste der Stoppwörter in Lucenes StopFilter?
- 23. Wie lautet die Anzahl der Datensätze, wenn 1 zurückgegeben wird?
- 24. Wie lautet die Sprache der Live-Vorlagen in IntelliJ?
- 25. Wie lautet die Liste der von ansible erkannten Umgebungsvariablen?
- 26. Wie lautet die Syntax der erweiterten for-Schleife in Java?
- 27. Wie lautet die Paketkennung der Standardanwendungen von Apple in iOS?
- 28. Wie lautet der HTTP-Statuscode für die ausstehende Anforderung?
- 29. Wie lautet der Buildpfad für die .Net Core/ASP5-Anwendung?
- 30. Wie lautet die Spezifikation der Auszeichnungssprache für umlet?
Vielen Dank für die Informationen ... –
Danke für die Info Mauricio. Ich habe "Probleme" mit Windsor in einem S # arpArch ähnlichen Projekt und das hilft sehr! – WillCodeForCoffee
Sehr gut gesagt! Ich fand diesen einen Link auf etwas Ähnliches, das über das inhärente Problem mit überladenen Konstruktoren an erster Stelle in Ihren Komponenten spricht, wenn Sie DI-Container verwenden, um Ihre Klasse zu instanziieren: http://stackoverflow.com/questions/7926686/castle- windsor-force-resolver-to-use-specified-constructor – RBT