Frage

Ich bin seit langer Zeit eine Windows-Entwickler, meine Zähne geschnitten, auf win32 und frühen COM. Ich habe seit 2001 mit .NET gearbeitet, also bin ich ziemlich fließend in C # und der CLR. Ich habe noch nie von Schloss Windsor gehört, bis ich in Stack-Überlauf gestartet teilnehmen. Ich habe das Schloss Windsor „Getting Started“ Leitfaden zu lesen, aber es ist nicht klicken.

Teach diesen alten Hund neue Tricks und mir sagen, warum soll ich Castle Windsor in meine Enterprise-Anwendungen zu integrieren werden.

War es hilfreich?

Lösung

Schloss Windsor ist eine Umkehrung des Kontrollinstrumentes. Es gibt andere wie sie.

Es können Sie Objekte mit vorgefertigten und vorverdrahtet Abhängigkeiten direkt dort. Eine ganze Objektgraph über Reflexion und Konfiguration erstellt, anstatt die „neuen“ Betreiber.

Starten Sie hier: http://tech.groups.yahoo.com/group / altdotnet / message / 10434


Stellen Sie sich eine E-Mail-Klasse haben. EmailSender. Stellen Sie sich eine andere Klasse WorkflowStepper haben. Innerhalb WorkflowStepper müssen Sie EmailSender verwenden.

Sie können immer sagen new EmailSender().Send(emailMessage);

aber, dass - die Verwendung von new - schafft eine enge Verbindung, die schwer zu ändern ist. (Dies ist ein winziges konstruiertes Beispiel, nachdem alle)

Also, was, wenn statt newing dieses Bad Boy nach oben innerhalb WorkflowStepper, Sie übergeben einfach in den Konstruktor?

Also wer auch immer genannt es um neue mußte die EmailSender.

new WorkflowStepper(emailSender).Step()

Stellen Sie sich Hunderte dieser kleinen Klassen, die nur eine Verantwortung haben (google SRP) .. und Sie ein paar von ihnen in WorkflowStepper:

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

Stellen Sie sich vor über die Details EmailSender nicht besorgniserregend, wenn Sie WorkflowStepper oder AlertRegistry schreiben

Sie sorgen sich nur um die Sorge mit dem Sie arbeiten.

Stellen Sie sich vor, diese ganze Grafik (Baum) von Objekten und Abhängigkeiten wird im RUN TIME verdrahtet, so dass, wenn Sie dies tun:

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

erhalten Sie einen echten Deal WorkflowStepper mit allen Abhängigkeiten automatisch ausgefüllt, wo Sie sie benötigen.

Es gibt keine new

Es nur geschieht - weil er weiß, was was braucht.

Und können Sie wenige Defekte mit besser konzipiert, DRY-Code in einer prüfbaren und wiederholbaren Weise schreiben.

Andere Tipps

Ich denke, IoC ein Sprungbrett in der richtigen Richtung auf dem Weg zu mehr Produktivität und Freude an dem Entwicklungsteam (einschließlich PM, BA ein bos). Es hilft, eine Trennung von Bedenken zwischen Entwicklern und für die Prüfung zu etablieren. Es gibt innere Ruhe, wenn Architecting, die für Flexibilität ermöglicht als Rahmen kommen in die und aus.

Der beste Weg, um das Ziel, das IoC (CW oder Ninject etc ..) nimmt einen Stich zu erreichen an ist Politik # 1 und # 2 Entfernen Notwendigkeit zu beseitigen, für die Entwickler an der Fassade des falschen Verständnis setzen bei der Entwicklung. Haben diese beiden Lösungen nicht im Zusammenhang mit IoC scheinen? Sie sind:)

Mark Seemann schrieb und ausgezeichnetes Buch über DI (Dependency Injection), die eine Teilmenge von IOC ist. Er vergleicht auch eine Reihe von Containern. Ich kann dieses Buch nicht genug empfehlen. Der Name des Buches ist: "Dependency Injection in .Net" https: // www .manning.com / Bücher / dependency-Injektion-in-dot-net

Schloss Windsor ist Dependency Injection container. Es bedeutet, mit Hilfe dieser Sie Ihre Abhängigkeiten injizieren und nutzen sie, ohne sie mit Hilfe neuer Keyword-Erstellung. z.B. Betrachten Sie haben ein Repository oder einen Dienst geschrieben und möchten es an vielen Orten zu verwenden, müssen Sie zuerst Ihren Service / Repository registrieren und Sie beginnen können, es nach Gebrauch an der gewünschten Stelle zu injizieren. Sie können einen Blick auf die unten Tutorial nehmen, die ich gefolgt Schloss windsor zu lernen.

Link .

Hoffe, es wird Ihnen helfen.

Einfach ausgedrückt. Stellen Sie sich eine Klasse in Ihrem Code begraben haben, die ein paar einfachen Konfigurationswerte benötigt, um seine Arbeit zu tun. Das bedeutet, dass alles, was eine Instanz dieser Klasse erstellt braucht diese Abhängigkeiten zu bekommen, so dass Sie in der Regel am Ende mit Lasten von Klassen Refactoring auf dem Weg nur ein bisschen Config passieren nach unten, wo die Instanz wird erstellt.

Also entweder viele Klassen unnötig verändert, Sie Haufen des Config-Wert in eine großen Config-Klasse, die auch schlecht ... oder Schlimmste noch Service Locator gehen!

IoC ermöglicht Ihre Klasse alle ohne diesen Aufwand seine depencencies zu bekommen, und verwaltet Lebensdauern von Instanzen mehr ausdrücklich zu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top