Welche C # /. NET Dependency Injection Frameworks sind einen Blick wert? Und was können Sie über ihre Komplexität und Geschwindigkeit sagen.
Welche C # /. NET Dependency Injection Frameworks sind einen Blick wert? Und was können Sie über ihre Komplexität und Geschwindigkeit sagen.
Antworten:
Bearbeiten (nicht vom Autor): Eine umfassende Liste der IoC-Frameworks finden Sie unter https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
Die ursprüngliche Antwort folgt.
Ich nehme an, dass ich hier etwas wählerisch bin, aber es ist wichtig zu beachten, dass DI (Dependency Injection) ein Programmiermuster ist und durch ein IoC-Framework (Inversion of Control) erleichtert wird, aber nicht erforderlich ist. IoC-Frameworks vereinfachen DI erheblich und bieten über DI hinaus eine Reihe weiterer Vorteile.
Davon abgesehen bin ich sicher, dass Sie das gefragt haben. Informationen zu IoC-Frameworks; Ich habe Spring.Net und CastleWindsor oft benutzt , aber der wahre Schmerz im Hintergrund war all die lästige XML-Konfiguration, die Sie schreiben mussten! Sie bewegen sich jetzt so ziemlich alle auf diese Weise, daher verwende ich StructureMap seit ungefähr einem Jahr. Seitdem es zu einer fließenden Konfiguration mit stark typisierten Generika und einer Registrierung übergegangen ist, ist meine Schmerzgrenze bei der Verwendung von IoC gesunken unter Null! Ich habe einen absoluten Kick davon zu wissen, dass meine IoC-Konfiguration (zum größten Teil) zur Kompilierungszeit überprüft wird und ich nur Freude an StructureMap und seiner Geschwindigkeit hatte. Ich werde nicht sagen, dass die anderen zur Laufzeit langsam waren, aber sie waren für mich schwieriger einzurichten und Frustration gewann oft den Tag.
Aktualisieren
Ich habe Ninject in meinem neuesten Projekt verwendet und es war eine absolute Freude, es zu verwenden. Die Worte versagen mir hier ein bisschen, aber (wie wir in Großbritannien sagen) dieser Rahmen ist "die Hunde". Ich kann es nur empfehlen für Projekte auf der grünen Wiese, bei denen Sie schnell einsatzbereit sein möchten. Ich habe alles, was ich brauchte, aus einem fantastischen Satz von Ninject-Screencasts von Justin Etheredge bekommen. Ich kann nicht sehen, dass das Nachrüsten von Ninject in vorhandenen Code überhaupt ein Problem darstellt, aber meiner Erfahrung nach könnte das Gleiche von StructureMap gesagt werden . Es wird eine schwierige Entscheidung zwischen diesen beiden sein, aber ich hätte lieber Konkurrenz als Stagnation und es gibt eine anständige Menge an gesundem Wettbewerb da draußen.
Weitere IoC-Screencasts finden Sie auch hier auf Dimecasts .
Es hängt davon ab, wonach Sie suchen, da jeder seine Vor- und Nachteile hat.
Spring.NET
ist am ausgereiftesten, da es aus dem Frühling aus der Java-Welt kommt. Spring verfügt über eine Vielzahl von Framework-Bibliotheken, die es auf die Unterstützung von Web, Windows usw. erweitern.Castle Windsor
ist eine der am weitesten verbreiteten in der .NET-Plattform und verfügt über das größte Ökosystem, ist hoch konfigurierbar / erweiterbar, verfügt über ein benutzerdefiniertes Lifetime-Management, AOP-Unterstützung, NHibernate-Unterstützung und ist ein rundum beeindruckender Container. Windsor ist Teil eines gesamten Stacks, der Monorail, Active Record usw. enthält. NHibernate selbst baut auf Windsor auf.Structure Map
hat eine sehr reichhaltige und feinkörnige Konfiguration über ein internes DSL.Autofac
ist ein IoC-Container des neuen Zeitalters mit all seiner inhärenten Unterstützung für funktionale Programmierung. Bei der Verwaltung der Lebensdauer wird auch ein anderer Ansatz verfolgt als bei den anderen. Autofac ist noch sehr neu, aber es legt die Messlatte für das, was mit IoC möglich ist.Ninject
Ich habe gehört, ist mehr nackte Knochen mit weniger ist mehr Ansatz (gehört nicht erlebt).Unity
ist: Es stammt von Microsoft und wird von Microsoft unterstützt (p & p). Unity hat eine sehr gute Leistung und eine großartige Dokumentation. Es ist auch sehr konfigurierbar. Es hat nicht alle Schnickschnack von beispielsweise Castle / Structure Map.Zusammenfassend hängt es also wirklich davon ab, was für Sie wichtig ist. Ich würde anderen zustimmen, zu gehen und zu bewerten und zu sehen, welches passt. Das Schöne ist, dass Sie eine schöne Auswahl an Donuts haben, anstatt nur einen Gelee zu haben.
Autofac. https://github.com/autofac/Autofac Es ist sehr schnell und ziemlich gut. Hier ist ein Link mit Vergleichen (erstellt, nachdem Ninject ein Speicherverlustproblem behoben hat).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninject ist großartig. Es scheint sehr schnell zu sein, aber ich habe keine Vergleiche gemacht. Ich weiß, dass Nate, der Autor, einige Vergleiche zwischen Ninject und anderen DI-Frameworks durchgeführt hat und nach weiteren Möglichkeiten sucht, um die Geschwindigkeit von Ninject zu verbessern.
Ich habe viele Leute gehört, die ich respektiere und die gute Dinge über StructureMap und CastleWindsor sagen. Das sind meiner Meinung nach die großen Drei, die man sich gerade ansehen sollte.
Ich benutze Simple Injector :
Simple Injector ist eine einfache, flexible und schnelle Abhängigkeitsinjektionsbibliothek, die bewährte Methoden verwendet, um Ihre Lösungen in Richtung Erfolg zu führen.
Ich bin ein großer Fan von Castle. Ich mag die Einrichtungen, die es auch jenseits der IoC Container-Geschichte bietet. Es ist wirklich einfach, NHibernate, Protokollierung, AOP usw. zu verwenden. Ich verwende Binsor auch für die Konfiguration mit Boo und habe mich deshalb wirklich in Boo als Sprache verliebt.
Ich kann Ninject empfehlen. Es ist unglaublich schnell und einfach zu bedienen, aber nur wenn Sie keine XML-Konfiguration benötigen, sollten Sie Windsor verwenden.
Ich habe den größten Teil eines Tages ohne Erfolg damit verbracht, das einfachste Spring.NET-Beispiel zum Laufen zu bringen. Konnte nie herausfinden, wie ich meine Assembly aus der XML-Datei finden kann. In ungefähr 2 Stunden konnte ich Ninject zum Laufen bringen, einschließlich des Testens der Integration mit NUnit und MSTest.
Ich habe Spring.NET in der Vergangenheit verwendet und hatte großen Erfolg damit. Ich habe nie einen erheblichen Aufwand damit bemerkt, obwohl das Projekt, für das wir es verwendet haben, für sich genommen ziemlich schwer war. Das Durchlesen der Dokumentation dauerte nur ein wenig, bis sie eingerichtet war.
Das Tolle an C # ist, dass es einem Weg folgt, den jahrelange Java-Entwickler zuvor eingeschlagen haben. Mein Rat, also im Allgemeinen bei der Suche nach Tools dieser Art, ist, nach der soliden Java-Antwort zu suchen und zu prüfen, ob es noch eine .NET-Anpassung gibt.
Wenn es also um DI geht (und es gibt so viele Optionen, das ist wirklich Geschmackssache), ist Spring.NET . Darüber hinaus ist es immer ratsam, die Menschen hinter Projekten zu recherchieren. Ich habe kein Problem damit, SourceGear-Produkte für die Quellcodeverwaltung vorzuschlagen (außerhalb ihrer Verwendung), da ich Respekt vor Eric Sink habe. Ich habe Mark Pollack sprechen sehen und was soll ich sagen, der Typ versteht es einfach.
Am Ende gibt es viele DI-Frameworks, und Sie sollten am besten einige Beispielprojekte mit einigen von ihnen durchführen und eine fundierte Entscheidung treffen.
Viel Glück!
Ich denke, ein guter Anfang ist Ninject, es ist neu und hat viele Feinabstimmungen berücksichtigt und ist sehr schnell. Nate, der Entwickler, hat wirklich eine großartige Seite und großartigen Support.
Spring.Net ist ziemlich solide, aber die Dokumentation hat einige Zeit in Anspruch genommen. Autofac ist gut und obwohl .Net 2.0 unterstützt wird, benötigen Sie VS 2008, um es zu kompilieren, oder verwenden Sie die Befehlszeile, um Ihre App zu erstellen.