it-swarm.com.de

Was ist Castle Windsor und warum sollte es mich interessieren?

Ich bin ein langjähriger Windows-Entwickler, der mir bei Win32 und frühen COM-Versionen die Zähne geschnitten hat. Ich arbeite seit 2001 mit .Net, daher spreche ich ziemlich fließend C # und die CLR. Ich hatte noch nie von Castle Windsor gehört, bis ich anfing, an Stack Overflow teilzunehmen. Ich habe die Anleitung "Getting Started" von Castle Windsor gelesen, aber sie klickt nicht.

Bringen Sie diesem alten Hund neue Tricks bei und erklären Sie mir, warum ich Castle Windsor in meine Unternehmensanwendungen integrieren sollte.

184
David Hill

Castle Windsor ist eine Umkehrung des Steuerungswerkzeugs. Es gibt andere wie es.

Hier können Sie Objekte mit vorgefertigten und vorverdrahteten Abhängigkeiten finden. Ein komplettes Objektdiagramm, das durch Reflektion und Konfiguration erstellt wurde und nicht durch 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.

Man könnte immer new EmailSender().Send(emailMessage); sagen

aber das - die Verwendung von new - schafft eine enge Kopplung, 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 einbinden, sondern nur an den Konstruktor übergeben?

Also musste derjenige, der es anrief, 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). Und Sie verwenden einige davon in WorkflowStepper:

new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()

Stellen Sie sich vor, Sie kümmern sich nicht um die Details von EmailSender, wenn Sie WorkflowStepper oder AlertRegistry schreiben.

Sie sorgen sich nur um das Anliegen, mit dem Sie arbeiten.

Stellen Sie sich vor, dass dieser gesamte Graph (Baum) von Objekten und Abhängigkeiten zur RUN TIME verdrahtet wird. Wenn Sie dies tun, geschieht Folgendes:

WorkflowStepper stepper = Container.Get<WorkflowStepper>();

sie erhalten ein echtes Angebot 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 weniger Fehler mit besser gestaltetem DRY Code auf testbare und wiederholbare Weise schreiben.

351
Matt Hinze

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, die Bedenken zwischen Entwicklern und zum Testen zu trennen. Es gibt Ihnen die Gewissheit, dass Sie bei der Architektur flexibel sein können, wenn Frameworks ein- und ausgehen.

Der beste Weg, um das Ziel zu erreichen, das IoC (CW oder Ninject usw.) zu erreichen, besteht darin, die Politik Nr. 1 und Nr. 2 zu eliminieren, damit Entwickler beim Entwickeln die Fassade des falschen Verstehens aufsetzen müssen. Scheinen diese beiden Lösungen nicht mit IoC zu tun zu haben? Sie sind :)

3
Mike Socha III

Mark Seemann hat ein ausgezeichnetes Buch über DI (Dependency Injection) geschrieben, das eine Teilmenge des IOC ist. 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

3
IUnknown

Schloss Windsor ist Dependency Injection container. Damit können Sie Abhängigkeiten einfügen und verwenden, ohne sie mit Hilfe eines neuen Schlüsselworts zu erstellen. z.B. Angenommen, Sie haben ein Repository oder einen Service geschrieben und möchten ihn an vielen Orten verwenden, müssen Sie zuerst Ihren Service/Ihr Repository registrieren und können ihn/es verwenden, nachdem Sie ihn/es an der gewünschten Stelle injiziert haben. Sie können sich das folgende Tutorial ansehen, dem ich gefolgt bin, um Schloss Windsor zu lernen.

Link .

Hoffe es wird dir helfen.

2
Rakesh Burbure

Einfach ausgedrückt. Stellen Sie sich vor, Sie haben eine Klasse in Ihrem Code vergraben, die ein paar einfache Konfigurationswerte benötigt, um ihre Arbeit zu erledigen. Das bedeutet, dass alles, was eine Instanz dieser Klasse erstellt, diese Abhängigkeiten haben muss. Daher müssen Sie in der Regel viele Klassen auf dem Weg umgestalten, um nur ein wenig Konfiguration an den Ort weiterzuleiten, an dem die Instanz erstellt wird.

Entweder werden viele Klassen unnötigerweise geändert, Sie bündeln die Konfigurationswerte in eine große Konfigurationsklasse, was ebenfalls schlecht ist ... oder das Schlimmste ist, Sie gehen noch zum Service Locator!

IoC ermöglicht Ihrer Klasse, alle Abhängigkeiten ohne diesen Aufwand abzurufen, und verwaltet die Lebensdauer von Instanzen auch expliziter.

0
andrew pate