bearbeiten (nicht vom Autor): Es gibt eine umfassende Liste von IoC-Frameworks, die unter https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc verfügbar sind:
- Castle Windsor - Castle Windsor ist das beste und ausgereifteste Inversion of Control-Container, der für .NET und Silverlight verfügbar ist
- Unity - Leichtgewichtiger, erweiterbarer Dependency Injection-Container mit Unterstützung für Konstruktor-, Eigenschafts- und Methodenaufrufsinjektion
- Autofac - Ein süchtig machender .NET IoC-Container
- DryIoc - Einfacher, schneller und voll ausgestatteter IoC-Container.
- Ninject - Der Ninja der .NET-Abhängigkeitsinjektoren
- Spring.Net - Spring.NET ist ein Open Source-Anwendungsframework, das den Aufbau von Unternehmensanwendungen in .NET erleichtert
- Lamar - Ein schneller IoC-Container, der stark für die Verwendung in ASP.NET Core und anderen .NET-Serveranwendungen optimiert ist.
- LightInject - Ein ultraleichter IoC-Container
- Simple Injector - Simple Injector ist eine einfach zu verwendende 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.
- Scrutor - Assembly-Scanning-Erweiterungen für Microsoft.Extensions.DependencyInjection.
- VS MEF - Managed Extensibility Framework (MEF)-Implementierung, die von Visual Studio verwendet wird.
- TinyIoC - Ein einfach zu verwendender, problemloser Inversion of Control-Container für kleine Projekte, Bibliotheken und Anfänger gleichermaßen.
- Stashbox - Ein leichtgewichtiger, schneller und portabler Dependency Injection-Framework für .NET-basierte Lösungen.
Originalantwort folgt.
Ich nehme an, ich bin hier vielleicht etwas pingelig, aber es ist wichtig zu beachten, dass DI (Dependency Injection) ein Programmiermuster ist und von einem IoC (Inversion of Control)-Framework ermöglicht, jedoch nicht benötigt wird. IoC-Frameworks machen DI einfach viel einfacher und bieten eine Vielzahl anderer Vorteile neben DI.
Das gesagt, ich bin mir sicher, dass das Ihre Frage war. Über IoC-Frameworks; Ich habe früher viel Spring.Net und CastleWindsor verwendet, aber der eigentliche Schmerz im Allerwertesten war die lästige XML-Konfiguration, die man schreiben musste! Sie gehen jetzt alle in diese Richtung, deshalb habe ich in den letzten Jahr StructureMap verwendet, und seitdem es auf eine fließende Konfiguration mit stark typisierten Generika und einem Register umgestiegen ist, ist meine Schmerzgrenze bei der Verwendung von IoC unter null gefallen! Es bereitet mir jetzt absolute Freude zu wissen, dass meine IoC-Konfiguration zur Kompilierzeit überprüft wird (weitgehend) und ich hatte nur Freude mit StructureMap und seiner Geschwindigkeit. Ich würde nicht behaupten, dass die anderen bei der Laufzeit langsam waren, aber sie waren für mich schwieriger einzurichten und die Frustration gewann oft den Tag.
Aktualisierung
Ich habe bei meinem letzten Projekt Ninject verwendet und es war ein absolutes Vergnügen. Die Worte fehlen mir ein wenig hier, aber (wie wir in Großbritannien sagen) dieses Framework ist 'the Dogs'. Ich würde es für alle Greenfield-Projekte empfehlen, bei denen Sie schnell einsatzbereit sein möchten. Ich habe alles, was ich brauchte, aus einem fantastischen Set von Ninject-Screencasts von Justin Etheredge erhalten. Ich kann mir nicht vorstellen, dass das Nachrüsten von Ninject in bestehenden Code ein Problem darstellt, aber das Gleiche könnte auch von StructureMap in meiner Erfahrung gesagt werden. Es wird in Zukunft eine schwierige Wahl zwischen den beiden sein, aber mir ist lieber Wettbewerb als Stillstand und es gibt eine anständige Menge an gesundem Wettbewerb da draußen.
Weitere IoC-Screencasts finden Sie auch hier auf Dimecasts.
14 Stimmen
IoC Container Benchmark - Leistungsvergleich enthält Leistungs- und Funktionsvergleichstabellen für mehr als 20 Produkte und hält sie auf dem neuesten Stand. Es empfiehlt Simple Injector
0 Stimmen
Ich schätze Ninject & Maestro. Ich freue mich, dass die am besten bewertete Antwort Ninject als "ein absolutes Vergnügen" bezeichnet.
7 Stimmen
Ich würde betonen, dass Sie sich, bevor Sie sich mit IoC-Containern beschäftigen, ohne einen auskommen sollten. Führen Sie Ihre Verdrahtung und Injektion manuell durch, es ist wirklich nicht kompliziert oder erfordert eine Menge Code, es sei denn, Sie haben wirklich komplexe oder große Systeme. Wenn Sie das Gefühl haben, dass Sie es verstehen und es mühsam wird, werden Sie besser in der Lage sein zu verstehen, welche Art von Framework Ihnen helfen würde. Es gibt jedoch keine Regel, die besagt, dass ein Projekt unbedingt einen IoC-Container haben muss, um die DI richtig durchführen zu können.
2 Stimmen
Beginnen Sie mit keiner. Erstellen Sie das erforderliche Objektgraph manuell. Unterschiedliche Frameworks haben unterschiedliche Ansätze, die von Ihren Bedürfnissen abhängen. Bevor Sie sich für eines entscheiden, müssen Sie erkennen, welche Funktionen Sie am meisten benötigen.
1 Stimmen
Da dotnetcore die Zukunft ist, sollten Sie sich lieber an seine integrierte DI-Unterstützung halten. Es ist sehr gut und hochgradig anpassbar.