2009-05-18 6 views
3

[Revision 5/14/09: Ich brauche diese Dotnet 2.0 wegen meiner Einsatzszenario Ziel]Welche Dependency-Injection-Technik sollte ich in Dotnet verwenden?

Ich bin Injection & IoC Abhängigkeit.

Ich sehe, dass es eine Fülle von Containern und Bibliotheken gibt, um den Prozess zu unterstützen.

Was sind die Vor- und Nachteile der Verwendung dieser Bibliotheken. Was ist dein Lieblingsbehälter (Dotnet) und warum?

Wie wäre es, meinen eigenen Container für Dependency Injection zu rollen?

Danke,

Peter Stephens

Antwort

3

Wenn Sie nur Dependency Injection benötigen, wird AutoFac wahrscheinlich die beste Option sein, da es klein, einfach und logisch ist. Es sollte nicht schwer sein zu grok.

Sobald Sie das bekommen, und Sie das Bedürfnis nach reiferen Produkt (das kann andere Dinge als nur DI) tun, würde ich vorschlagen, werfen Sie einen Blick auf Schloss Windsor, die sehr leistungsfähig aus der Box ist, sehr gut entworfen und anpassbar. Wenn Sie das nicht mögen, habe ich gute Dinge über StrcutureMap gehört.

+0

Das sieht interessant aus. Es zielt auch auf Dotnet 2.0, obwohl es eine 3.5-Build-Umgebung benötigt. Das werde ich definitiv berücksichtigen. –

+0

Wenn Sie .NET 2.0 in Windsor ausrichten möchten, gibt es im Repository ein Tag, das .NET 2.0 unterstützt. Alle neueren Versionen zielen auf v3.5sp1. –

+0

Die auf .NET 2.0 ausgerichtete Version ist in Bezug auf Funktionen fast identisch mit Windsor 2.0. –

0

ich MEF mögen, vor allem, weil es .NET 4.0 sehr gut unterstützt in sein wird (da MS hat angekündigt, dass sie es für die Basis des DI verwenden in Visual Studio 2010).

Es ist auch ziemlich einfach zu verwenden, besonders für DI. Die Handhabung von DI- und Add-In-Szenarien ist das Hauptziel dieses Frameworks, daher ist es in diesen Fällen sehr sauber und einfach.

Es funktioniert auch für IoC, aber das ist nicht das primäre Ziel.

+2

Ich habe gute Dinge über MEF gehört.Ich habe kürzlich einen Hanselminutes-Podcast angehört, der einen guten Überblick gab: http://www.hanselminutes.com/default.aspx?showID=166 "Managed Extensibility Framework mit Glenn Block" –

+0

Ich benutze es schon seit einer Weile und es funktioniert großartig. Ich mag besonders die Art und Weise, wie es mit Katalogen und der Injektion umgeht - man bekommt eine Menge Kontrolle, wenn man es will, aber es ist auch sehr einfach, einfach "es zum Laufen zu bringen". Ich mag den Ansatz, den sie damit gemacht haben, sogar über meine eigenen DI-Lösungen, die ich geschrieben habe (http://plugingtoolkit.net/), die ich jetzt zugunsten von MEF aufgegeben habe. –

+0

Ich würde MEF nicht für die Abhängigkeitsinjektion verwenden, da das nicht dafür gedacht ist. Dafür gibt es bessere Lösungen, von denen viele mit MEF arbeiten können. –

1

Ich verwende ein IOC-Tool namens StructureMap: Structure Map Ich fand das Tool sehr nützlich und einfach zu implementieren.

+0

StructureMap sieht auch gut aus. Leider scheint die neueste Version nicht auf Dotnet 2.0 zu zielen :-( –

+0

Yeah die spätere Version benutzt viele Lambda-Ausdrücke ... – CSharpAtl

2
+0

Dieses Framework sieht interessant aus. Es scheint viel mehr zu tun als nur IoC und DI. Ich ' Ich bin mir nicht sicher, ob ich in diesem Moment mehr lösen will als das IoC-Problem –

+0

Dieses Framework bringt eine Fülle von Komponenten und externen Abhängigkeiten mit sich, aber dies könnte ein Vorteil sein, da es in größeren Apps und Komponenten komplett ist gut gewählt – Beachwalker

0

Sie können Common Service Locator in Ihrem Code verwenden, wo es den Container explizit aufrufen muss. Auf diese Weise können Sie, wenn Sie mit dem gewählten Rahmen nicht zufrieden sind, den neuen Rahmen wechseln.

+0

Das sieht nach einer Möglichkeit aus Abstraktion der Abstraktionsebene ist ein schönes Konzept :-) Es scheint auch Dotnet 2.0 zu unterstützen. –

+0

Common Service Locator ist ein nettes Konzept, aber die wirkliche harte Arbeit ist nicht die Änderung der Schnittstelle ... Sie müssen Ihre IoC-Config-Dateien konvertieren. Habe von Spring.net config zu Ninject gewechselt ... das kann Schmerzen im Arsch sein. ;-) – Beachwalker

1

Nach etwas mehr Forschung: Ninject scheint eine nützliche Alternative zu sein. Und es unterstützt Dotnet 2.0. Und es erfordert keine massive XML-Konfiguration.

Immer noch versucht, Best Practices für eine andere DI-Konfiguration für die Produktions- und Komponententestumgebungen herauszufinden.

1

anderen Thread zu diesem Thema gefunden here

0

Spring.NET. Wenn Sie nur die DI-Komponente von Spring verwenden möchten, ist dies alles, was Sie benötigen (und Sie müssen nur auf diese DLLs verweisen). Später, wenn Sie das Unit-Testing-Zeug oder das Quartz-Zeug oder das NHibernate-Zeug verwenden wollen, können Sie diese DLLs ebenfalls hinzufügen - es ist modular aufgebaut. Und all die verschiedenen Teile haben eine Konsistenz über sie, weil sie aus dem gleichen Rahmen stammen. Ich denke, es ist ein wirklich gutes Framework, das .NET sehr gut ergänzt.