Ich bin ein langjähriger Windows-Entwickler, der mir bei Win32 und Early COM die Zähne geschnitten hat. Ich arbeite seit 2001 mit .NET, daher spreche ich C # und die CLR ziemlich fließend. Ich hatte noch nie von Castle Windsor gehört, bis ich anfing, an Stack Overflow teilzunehmen. Ich habe die Anleitung "Erste Schritte" von Castle Windsor gelesen, aber sie klickt nicht.
Bringen Sie diesem alten Hund neue Tricks bei und sagen Sie mir, warum ich Castle Windsor in meine Unternehmensanwendungen integrieren sollte.
Antworten:
Castle Windsor ist eine Umkehrung des Steuerungswerkzeugs. Es gibt andere wie es.
Es kann Ihnen Objekte mit vorgefertigten und vorverdrahteten Abhängigkeiten direkt dort geben. Ein gesamtes Objektdiagramm, das über Reflexion und Konfiguration erstellt wurde und nicht über den "neuen" Operator.
Beginnen Sie hier: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Stellen Sie sich vor, Sie haben eine E-Mail-Sendeklasse. EmailSender. Stellen Sie sich vor, Sie haben eine andere Klasse WorkflowStepper. In WorkflowStepper müssen Sie EmailSender verwenden.
Das könnte man immer sagen
new EmailSender().Send(emailMessage);
Aber das - die Verwendung von
new
- schafft eine enge Kupplung, die schwer zu ändern ist. (Dies ist schließlich ein winziges erfundenes Beispiel)Was ist, wenn Sie diesen bösen Jungen nicht in WorkflowStepper neu geschrieben, sondern nur an den Konstruktor übergeben haben?
Wer auch immer es anrief, musste den EmailSender neu einrichten.
new WorkflowStepper(emailSender).Step()
Stellen Sie sich vor, Sie haben Hunderte dieser kleinen Klassen, die nur eine Verantwortung haben (Google SRP). Sie verwenden einige davon in WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Stellen
EmailSender
Sie sich vor, Sie machen sich keine Gedanken über die Details, wenn Sie schreibenWorkflowStepper
oderAlertRegistry
Sie sorgen sich nur um die Bedenken, mit denen Sie arbeiten.
Stellen Sie sich vor, dieser gesamte Graph (Baum) von Objekten und Abhängigkeiten wird zur LAUFZEIT verkabelt, sodass Sie Folgendes tun:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
Sie erhalten ein echtes Geschäft
WorkflowStepper
mit allen Abhängigkeiten, die automatisch dort ausgefüllt werden, wo Sie sie benötigen.Es gibt kein
new
Es passiert einfach - weil es weiß, was was braucht.
Und Sie können mit besser entworfenem DRY-Code auf fehlerhafte und wiederholbare Weise weniger Fehler schreiben.
quelle
new
, ich weiß, wo dann alles ist. Ich mag auch nicht die Idee, Reflexionen zu verwenden, und es ist wirklich eine Black Box, Code, den wir nicht besitzen und daher nicht vollständig verstehen.Mark Seemann schrieb ein ausgezeichnetes Buch über DI (Dependency Injection), eine Teilmenge des IOC. Er vergleicht auch eine Reihe von Containern. Ich kann dieses Buch nicht genug empfehlen. Der Name des Buches lautet: "Dependency Injection in .Net" https://www.manning.com/books/dependency-injection-in-dot-net
quelle
Ich denke, IoC ist ein Sprungbrett in die richtige Richtung auf dem Weg zu mehr Produktivität und Freude am Entwicklungsteam (einschließlich PM, BA und BOs). Es hilft, eine Trennung der Bedenken zwischen Entwicklern und zum Testen herzustellen. Es gibt Ihnen Sicherheit bei der Architektur, was Flexibilität ermöglicht, da Frameworks ein- und ausgehen können.
Der beste Weg, um das Ziel zu erreichen, das IoC (CW oder Ninject usw.) anstrebt, besteht darin, die Politik Nr. 1 und Nr. 2 zu beseitigen, ohne dass Entwickler bei der Entwicklung die Fassade des falschen Verständnisses aufsetzen müssen. Scheinen diese beiden Lösungen nicht mit IoC zu tun zu haben? Sie sind :)
quelle
Castle Windsor ist
Dependency Injection container.
Es bedeutet, dass Sie mit dieser Hilfe Ihre Abhängigkeiten einfügen und verwenden können, ohne sie mit Hilfe eines neuen Schlüsselworts zu erstellen. Wenn Sie beispielsweise ein Repository oder einen Dienst geschrieben haben und es an vielen Stellen verwenden möchten, müssen Sie zuerst Ihren Dienst / Ihr Repository registrieren und können es verwenden, nachdem Sie es an der gewünschten Stelle injiziert haben. Sie können sich das folgende Tutorial ansehen, dem ich gefolgt bin, um Castle Windsor zu lernen.Link .
Hoffe es wird dir helfen.
quelle
Einfach ausgedrückt. Stellen Sie sich vor, Sie haben eine Klasse in Ihrem Code vergraben, die einige einfache Konfigurationswerte benötigt, um ihre Aufgabe zu erfüllen. Das bedeutet, dass alles, was eine Instanz dieser Klasse erstellt, diese Abhängigkeiten abrufen muss. Daher müssen Sie normalerweise viele Klassen auf dem Weg umgestalten, um nur ein wenig Konfiguration an den Ort zu übergeben, an dem die Instanz erstellt wird.
Entweder werden viele Klassen unnötig geändert, Sie bündeln die Konfigurationswerte in einer großen Konfigurationsklasse, was ebenfalls schlecht ist ... oder im schlimmsten Fall gehen Sie immer noch zum Service Locator!
Mit IoC kann Ihre Klasse alle Abhängigkeiten ohne diesen Aufwand abrufen und die Lebensdauer von Instanzen expliziter verwalten.
quelle