Frage

Welche C#/.NET-Dependency-Injection-Frameworks sind einen Blick wert?Und was können Sie über ihre Komplexität und Geschwindigkeit sagen?

War es hilfreich?

Lösung

bearbeiten (nicht vom Autor):Eine umfassende Liste der IoC-Frameworks finden Sie unter https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:

  • Schloss Windsor - Castle Windsor ist der beste ausgereifte Inversion of Control-Container seiner Art, der für .NET und Silverlight verfügbar ist
  • Einheit – Leichter, erweiterbarer Abhängigkeitsinjektionscontainer mit Unterstützung für die Injektion von Konstruktoren, Eigenschaften und Methodenaufrufen
  • Autofac - Ein süchtig machender .NET IoC-Container
  • DryIoc - Einfacher, schneller IoC-Container mit vollem Funktionsumfang.
  • Ninject – Der Ninja unter den .NET-Abhängigkeitsinjektoren
  • Strukturkarte – Der ursprüngliche IoC/DI-Container für .Net
  • Spring.Net – Spring.NET ist ein Open-Source-Anwendungsframework, das die Erstellung von .NET-Unternehmensanwendungen vereinfacht
  • LightInject - Ein ultraleichter IoC-Container
  • Einfacher Injektor – Simple Injector ist eine benutzerfreundliche Dependency Injection (DI)-Bibliothek für .NET 4+, die Silverlight 4+, Windows Phone 8, Windows 8 einschließlich Universal Apps und Mono unterstützt.
  • Microsoft.Extensions.DependencyInjection – Der Standard-IoC-Container für ASP.NET Core-Anwendungen.
  • Prüfer – Assembly-Scan-Erweiterungen für Microsoft.Extensions.DependencyInjection.
  • VS MEF – Managed Extensibility Framework (MEF)-Implementierung, die von Visual Studio verwendet wird.
  • TinyIoC - Eine einfach zu verwendende, problemlose Umkehrung des Kontrollcontainers für kleine Projekte, Bibliotheken und Anfänger gleichermaßen.

Die ursprüngliche Antwort folgt.


Ich schätze, ich bin hier vielleicht etwas wählerisch, aber es ist wichtig zu beachten, dass DI (Dependency Injection) ein Programmiermuster ist und durch ein IoC-Framework (Inversion of Control) ermöglicht wird, aber kein solches erfordert.IoC-Frameworks machen DI einfach viel einfacher und bieten über DI hinaus eine Vielzahl weiterer Vorteile.

Davon abgesehen bin ich sicher, dass Sie das gefragt haben.Über IoC Frameworks;Vorher habe ich benutzt Spring.Net Und CastleWindsor viel, aber der eigentliche Ärger im Hintergrund war die ganze lästige XML-Konfiguration, die Sie schreiben mussten!Sie bewegen sich jetzt so ziemlich alle in diese Richtung, also habe ich sie verwendet Strukturkarte Seit ungefähr einem Jahr und seit der Umstellung auf eine fließende Konfiguration mit stark typisierten Generika und einer Registrierung ist meine Schmerzgrenze bei der Verwendung von IoC auf unter Null gesunken!Es macht mir richtig Spaß, jetzt zu wissen, dass meine IoC-Konfiguration (größtenteils) zur Kompilierzeit überprüft wird, und ich habe mit StructureMap und seiner Geschwindigkeit nur Freude gehabt.Ich möchte nicht sagen, dass die anderen zur Laufzeit langsam waren, aber sie waren für mich schwieriger einzurichten und oft überwog die Frustration.

Aktualisieren

Ich habe verwendet Ninject bei meinem neuesten Projekt und es war ein absolutes Vergnügen, es zu verwenden.Mir fehlen hier ein wenig die Worte, aber (wie wir in Großbritannien sagen) dieser Rahmen ist „die Hunde“.Ich würde es wärmstens für alle Green-Field-Projekte empfehlen, bei denen Sie schnell einsatzbereit sein möchten.Ich bekam alles, was ich brauchte, von einem fantastische Reihe von Ninject-Screencasts von Justin Etheredge.Ich kann mir nicht vorstellen, dass die Nachrüstung von Ninject in vorhandenen Code überhaupt ein Problem darstellt, aber das Gleiche könnte man auch sagen Strukturkarte durch meine Erfahrung.In Zukunft wird es eine schwierige Entscheidung zwischen diesen beiden sein, aber ich hätte lieber Konkurrenz als Stagnation, und da draußen gibt es eine ganze Reihe gesunder Konkurrenz.

Weitere IoC-Screencasts sind ebenfalls zu finden hier auf Dimecasts.

Andere Tipps

Es hängt davon ab, wonach Sie suchen, denn jede hat ihre Vor- und Nachteile.

  1. Spring.NET ist am ausgereiftesten, da es aus Spring aus der Java-Welt stammt.Spring verfügt über einen sehr umfangreichen Satz an Framework-Bibliotheken, die es erweitern, um Web, Windows usw. zu unterstützen.
  2. Castle Windsor ist einer der am weitesten verbreiteten in der .NET-Plattform und verfügt über das größte Ökosystem, ist hochgradig konfigurierbar/erweiterbar, verfügt über benutzerdefiniertes Lifetime-Management, AOP-Unterstützung, verfügt über inhärente NHibernate-Unterstützung und ist ein rundum großartiger Container.Windsor ist Teil eines gesamten Stacks, der Monorail, Active Record usw. umfasst.NHibernate selbst baut auf Windsor auf.
  3. Structure Map verfügt über eine sehr umfangreiche und feinkörnige Konfiguration über ein internes DSL.
  4. Autofac ist ein IoC-Container des neuen Zeitalters mit der gesamten inhärenten funktionalen Programmierunterstützung.Es verfolgt auch einen anderen Ansatz zur Verwaltung der Lebensdauer als die anderen.Autofac ist noch sehr neu, aber es setzt neue Maßstäbe für das, was mit IoC möglich ist.
  5. Ninject Ich habe gehört, dass es eher auf das Wesentliche ankommt, mit einem „Weniger-ist-mehr“-Ansatz (habe ich gehört, aber noch nicht erlebt).
  6. Der größte Diskriminator von Unity Ist:Es ist von Microsoft (P&P) und wird von diesem unterstützt.Unity bietet eine sehr gute Leistung und eine großartige Dokumentation.Es ist außerdem hochgradig konfigurierbar.Es verfügt nicht über den ganzen Schnickschnack einer Burg-/Strukturkarte.

Zusammenfassend lässt sich sagen, dass es wirklich darauf ankommt, was Ihnen wichtig ist.Ich würde den anderen darin zustimmen, hinzugehen und zu bewerten und herauszufinden, welches passt.Das Schöne ist, dass man eine schöne Auswahl an Donuts hat und nicht nur einen mit Gelee haben muss.

Autofac. https://github.com/autofac/Autofac Es ist wirklich schnell und ziemlich gut.Hier ist ein Link mit Vergleichen (erstellt, nachdem Ninject ein Speicherleckproblem behoben hat).

http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html

Ninject ist großartig.Es scheint wirklich schnell zu sein, aber ich habe keine Vergleiche durchgeführt.Ich weiß, dass Nate, der Autor, einige Vergleiche zwischen Ninject und anderen DI-Frameworks durchgeführt hat und nach weiteren Möglichkeiten sucht, die Geschwindigkeit von Ninject zu verbessern.

Ich habe viele Leute, die ich respektiere, Gutes über StructureMap und CastleWindsor sagen hören.Meiner Meinung nach sind das die großen Drei, die man sich jetzt ansehen sollte.

ich benutze Einfacher Injektor:

Simple Injector ist eine einfache, flexible und schnelle Abhängigkeitsinjektionsbibliothek, die Best Practices nutzt, um Ihre Lösungen zum Erfolg zu führen.

Ich bin ein großer Fan von Castle.Ich liebe die Möglichkeiten, die es auch über die IoC-Container-Geschichte hinaus bietet.Es vereinfacht die Verwendung von NHibernate, Protokollierung, AOP usw. erheblich.Ich benutze auch Binsor für die Konfiguration mit Boo und habe mich dadurch wirklich in Boo als Sprache verliebt.

Ich kann Ninject empfehlen.Es ist unglaublich schnell und einfach zu verwenden, aber nur, wenn Sie keine XML-Konfiguration benötigen, andernfalls sollten Sie Windsor verwenden.

Ich habe den größten Teil des Tages erfolglos damit verbracht, das einfachste Spring.NET-Beispiel zum Laufen zu bringen.Konnte nie herausfinden, wie ich meine Assembly aus der XML-Datei finden kann.Andererseits konnte ich Ninject in etwa zwei Stunden zum Laufen bringen, einschließlich der Tests der Integration mit NUnit und MSTest.

Ich habe verwendet Spring.NET in der Vergangenheit und hatte großen Erfolg damit.Ich habe nie einen nennenswerten Mehraufwand damit festgestellt, obwohl das Projekt, für das wir es verwendet haben, für sich genommen ziemlich aufwändig war.Das Durchlesen hat nur wenig Zeit in Anspruch genommen Dokumentation um es einzurichten.

Das Tolle an C# ist, dass es einem Weg folgt, den viele Java-Entwickler vor ihm eingeschlagen haben.Wenn ich also nach Tools dieser Art suche, rate ich Ihnen generell, nach einer soliden Java-Antwort zu suchen und zu prüfen, ob es bereits eine .NET-Anpassung gibt.

Wenn es also um DI geht (und es gibt so viele Optionen, ist das wirklich Geschmackssache). 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ßer sie zu verwenden), weil ich Respekt vor Eric Sink habe.Ich habe Mark Pollack sprechen sehen und was soll ich sagen, der Typ versteht es einfach.

Letztlich gibt es viele DI-Frameworks und am besten führen Sie einige Beispielprojekte mit einigen davon durch und treffen eine fundierte Entscheidung.

Viel Glück!

Ich denke, ein guter Ausgangspunkt ist Ninject. Es ist neu, hat viele Feinabstimmungen berücksichtigt und ist wirklich schnell.Nate, der Entwickler, hat wirklich eine tolle 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 zum Kompilieren oder verwenden Sie die Befehlszeile, um Ihre App zu erstellen.

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