Was sind die Stärken und Schwächen dieser beliebten DI / IoC-Frameworks und könnte man sie leicht als die besten bezeichnen? ..:
- Ninject
- Einheit
- Castle.Windsor
- Autofac
- StructureMap
Gibt es andere DI / IoC-Frameworks für C #, die ich hier nicht aufgelistet habe?
Im Kontext meines Anwendungsfalls erstelle ich eine Client-WPF-App und eine WCF / SQL-Dienstinfrastruktur. Benutzerfreundlichkeit (insbesondere in Bezug auf klare und präzise Syntax), konsistente Dokumentation, gute Community-Unterstützung und Leistung sind wichtige Faktoren in meiner Wahl.
Aktualisieren:
Die genannten Ressourcen und doppelten Fragen scheinen veraltet zu sein. Kann sich jemand mit Kenntnissen über all diese Frameworks melden und echte Einblicke gewähren?
Mir ist klar, dass die meisten Meinungen zu diesem Thema wahrscheinlich voreingenommen sind, aber ich hoffe, dass sich jemand die Zeit genommen hat, all diese Rahmenbedingungen zu studieren und zumindest einen allgemein objektiven Vergleich zu haben.
Ich bin durchaus bereit, meine eigenen Untersuchungen durchzuführen, wenn dies noch nicht geschehen ist, aber ich nahm an, dass dies etwas war, was zumindest einige Leute bereits getan hatten.
Zweites Update:
Wenn Sie Erfahrung mit mehr als einem DI / IoC-Container haben, ordnen Sie bitte die Vor- und Nachteile dieser Container ein und fassen Sie sie zusammen. Vielen Dank. Dies ist keine Übung, um all die obskuren kleinen Container zu entdecken, die die Leute gemacht haben. Ich suche nach Vergleichen zwischen den beliebten (und aktiven) Frameworks.
Antworten:
Während eine umfassende Antwort auf diese Frage Hunderte von Seiten meines Buches einnimmt , ist hier eine kurze Vergleichstabelle, an der ich noch arbeite:
quelle
Ich bin auf einen weiteren Leistungsvergleich gestoßen (letztes Update 10. April 2014). Es vergleicht Folgendes:
Hier ist eine kurze Zusammenfassung aus dem Beitrag:
Sie können auch versuchen, die Common Service Selector Library zu verwenden, und hoffentlich mehrere Optionen ausprobieren, um herauszufinden, was für Sie am besten funktioniert.
Einige Informationen zur Common Service Selector Library auf der Website:
Aktualisieren
13.09.2011: Funq und Munq wurden der Teilnehmerliste hinzugefügt. Die Diagramme wurden ebenfalls aktualisiert und Spring.NET wurde aufgrund seiner schlechten Leistung entfernt.
04.11.2011: " Simple Injector hinzugefügt , die Leistung ist die beste aller Teilnehmer".
quelle
Lesen Sie einfach diesen großartigen .Net DI-Container-Vergleichsblog von Philip Mat.
Er führt einige gründliche Leistungsvergleichstests durch;
Er empfiehlt Autofac, da es klein, schnell und einfach zu bedienen ist ... Ich stimme zu. Es scheint, dass Unity und Ninject die langsamsten in seinen Tests sind.
quelle
Haftungsausschluss: Ab Anfang 2015 gibt es einen großartigen Vergleich der IoC Container- Funktionen von Jimmy Bogard . Hier eine Zusammenfassung:
Vergleichsbehälter:
Das Szenario lautet wie folgt: Ich habe eine Schnittstelle, IMediator, über die ich eine einzelne Anfrage / Antwort oder eine Benachrichtigung an mehrere Empfänger senden kann:
Ich habe dann einen Basissatz von Anfragen / Antworten / Benachrichtigungen erstellt:
Ich war daran interessiert, einige Dinge in Bezug auf die Containerunterstützung für Generika zu untersuchen:
Setup für generische Varianz (Registrieren von Handlern für Base INotification / Erstellen von Anforderungspipelines) Meine Handler sind ziemlich einfach, sie geben nur auf der Konsole aus:
Autofac
Ninject
Einfacher Injektor
StructureMap
Einheit
Windsor
quelle
Tatsächlich gibt es Tonnen von IoC-Frameworks. Es scheint, als würde jeder Programmierer irgendwann in seiner Karriere versuchen, einen zu schreiben. Vielleicht nicht, um es zu veröffentlichen, sondern um das Innenleben zu lernen.
Ich persönlich bevorzuge Autofac, da es sehr flexibel ist und eine Syntax hat, die zu mir passt (obwohl ich es wirklich hasse, dass alle Registermethoden Erweiterungsmethoden sind).
Einige andere Frameworks:
quelle
RegisterControllers()
für MVC), daher hielt ich das Entwerfen für diesen Fall für sinnvoll. (Dies wurde vor mehr als 5 Jahren entworfen.)Nachdem ich mir den besten Vergleich angesehen habe, den ich bisher gefunden habe, ist:
http://www.sturmnet.org/blog/2010/03/04/poll-ioc-containers-for-net
http://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net
Es war eine Umfrage im März 2010.
Ein Punkt von Interesse für mich ist, dass Leute, die ein DI / IoC-Framework verwendet haben und es mochten / nicht mochten, StructureMap anscheinend die Nase vorn haben.
Auch aus der Umfrage geht hervor, dass Castle.Windsor und StructureMap am meisten bevorzugt werden.
Interessanterweise scheinen Unity und Spring.Net die beliebtesten Optionen zu sein, die im Allgemeinen nicht gemocht werden. (Ich habe Unity aus Faulheit (und Microsoft-Badge / Support) in Betracht gezogen, aber ich werde mir Castle Windsor und StructureMap jetzt genauer ansehen.)
Natürlich trifft dies wahrscheinlich (?) Nicht auf Unity 2.0 zu, das im Mai 2010 veröffentlicht wurde.
Hoffentlich kann jemand anderes einen Vergleich liefern, der auf direkten Erfahrungen basiert.
quelle
Sehen Sie für einen Vergleich von Net-Ioc-Frameworks auf Google-Code, einschließlich Linfu und Spring.net, die nicht auf Ihrer Liste sind, während ich diesen Text schreibe.
Ich habe mit spring.net gearbeitet: Es hat viele Funktionen (aop, Bibliotheken, Doku, ...) und es gibt viel Erfahrung damit im Dotnet und in der Java-Welt. Die Funktionen sind modularisiert, sodass Sie nicht alle Funktionen nutzen müssen. Bei den Funktionen handelt es sich um Abstraktionen häufig auftretender Probleme wie Datenbasisabnahme und Protokollabstraktion. Es ist jedoch schwierig, die IoC-Konfiguration durchzuführen und zu debuggen.
Nach dem, was ich bisher gelesen habe: Wenn ich mich für ein kleines oder mittleres Projekt entscheiden müsste, würde ich ninject verwenden, da die ioc-Konfiguration in c # abgeschlossen und debuggbar ist. Aber ich habe noch nicht damit gearbeitet. für große modulare systeme würde ich wegen abstraktionsbibliotheken bei spring.net bleiben.
quelle