2009-08-12 10 views
28

zobaczyć również Which C#/.NET Dependency Injection frameworks are worth looking into?Co należy wziąć pod uwagę przy wyborze ram iniekcji zależność NET

Istnieje obecnie wiele dependencyinjection ramy do wyboru. Często byłeś zmuszany do korzystania z danego schematu wtrysku zależności ze względu na bibliotekę, z której korzystałeś. Jednak kod Common Service Locator library umożliwił niezależność kodu biblioteki od schematów wtrysku.

Czas potrzebny, aby nauczyć się ich wszystkich na tyle dobrze, aby zdecydować, który z nich jest nieuzasadniony. Nie wierzę, że osiągnęliśmy etap, w którym możemy mówić o najlepszej strukturze wtrysku zależności. Jakie więc pytania powinienem zadać projektowi i sobie, aby pomóc w podjęciu decyzji o najlepszej strukturze wtrysku zależności w danym przypadku?

Przydałoby się również wiedzieć, dlaczego wybrałeś schemat zastrzyków zależności, z którego aktualnie korzystasz i czy nadal jesteś zadowolony z tego wyboru.

Czy istnieje jeszcze użyteczne słownictwo, z którego można korzystać przy porównywaniu stylów wtryskowych zależności?

Czy biblioteka Service Locator działa w prawdziwym życiu, czy też jesteś zmuszony do korzystania z wielu różnych frameworków wtrysku zależności w tym samym projekcie?

Jak łatwo jest refraktorować kod za pomocą poszczególnych metod Dependency Injection Framework, np. Czy narzędzia takie jak ReSharper dobrze współpracują z daną strukturą?

Odpowiedz

15

FYI, tylko rano natknąłem się na ciekawe porównanie pomiędzy wszystkich kontenerów IoC .NET tutaj:

http://elegantcode.com/2009/01/07/ioc-libraries-compared/

Garść pytań:

  1. Ile nurtu wsparcie zrobić potrzebujesz? Wiosna jest prawdopodobnie największą. Wszyscy już go użyli lub już o nim słyszeli, więc mnóstwo informacji. Prawdopodobnie ma też największą liczbę funkcji, ale oznacza to, że trzeba się jeszcze czegoś nauczyć. Mniejszy pojemnik, taki jak Autofac, może być przyjemny, ale możesz napotkać problem, na który nie znajdziesz pomocy.
  2. Czy jesteś poręczna w konfiguracji Xml? Każdy kontener IoC opiera się na konfiguracji i konfiguracji. Wiosna i jedność są ciężkie dla Xml.
  3. Czy to trwały wybór? Jeśli jesteś w jednym z tych miejsc, w których masz tylko jedną szansę na wybór, nie ma to znaczenia. Ale jeśli kiedykolwiek zechcesz wybrać inne rozwiązanie na drodze, prawdopodobnie nie chcesz IoC, który wymaga od ciebie przypisania klas (sortuj odwrotność powyższego pytania), ponieważ będziesz nienawidzić siebie, gdy będziesz musiał zgrać wszystko te rzeczy. Dla porównania, usunięcie niektórych konfiguracji xml może nie być tak bolesne.
  4. Jaki jest twój sklep? Miałem problemy z ustawieniem kilku opcji otwartego oprogramowania tylko z powodu "sapania! To nie jest Microsoft!" reakcje. Jeśli jesteś prostym sklepem MS, korzystanie z Unity będzie znacznie łatwiejszym zwycięstwem kulturowym.

Na osobiste notatki:

Użyłem StructureMap z tych samych powodów wymienionych w blogu I połączone.Myślę, że konfiguracja Xml to gigantyczny ból do utrzymania, a zwłaszcza do debugowania (zobacz WCF). Nie próbowałem jeszcze Ninject, ale w oparciu o ich marketing, musi to być super rad!

+2

miałem odwrotny odpowiedź # 4, miałem oddech "nie jest open source". – Chris

+3

Naprawdę? To jest niesamowite. Walczyłem w tej walce przez długi czas. Nie uwierzyłbyś, że podstępne oferty musiałem zrobić, aby uzyskać NHibernate tutaj ;-) –

+1

# 1 jest ważnym czynnikiem, ale dostępność wsparcia nie zawsze jest funkcją rozmiaru bazy użytkownika i czasami jest odwrotnie. Na przykład. dla Autofac - mamy jedno z najbardziej responsywnych i pomocnych forów użytkowników w sieci. Inne mniej popularne opcje (np. Ninject) również mają doskonałą obsługę. –

2

Myślę, że wybór sprowadza się do znalezienia ram, które spełniają twoje wymagania, a następnie osobiste preferencje.

Czy twój projekt korzysta już z biblioteki, takiej jak narzędzia nosorożca, która jest już zintegrowana z architekturą DI? Jeśli tak, to może być dobrym punktem wyjścia, jeśli chcesz uniknąć używania "wielu różnych struktur wtryskiwania zależności".

Sprawdź te dwa stanowiska:

2

Wiosna i jedność są Xml ciężki.

Nie zgadzam się z tym stwierdzeniem dla Jedności; możesz napisać

i wykonać konfigurację w kodzie za pomocą płynnego interfejsu. Osobiście lubię Unity.

6

Trudno odpowiedzieć na których ramy są „najlepsze”, ale mogę powiedzieć, które ramy jest najprostszy: Proste Injector:

Simple Injector jest Inversion łatwy w użyciu biblioteki sterowania dla .NET i Silverlight. Obsługuje wyłącznie konfigurację kodu opartego i jest idealnym punktem wyjścia dla twórców nieznanych z większych bibliotek IoC/DI

http://simpleinjector.codeplex.com/

bezwstydna btw ;-)

Powiązane problemy