Ryzykując wkroczenie na terytorium świętej wojny, jakie są mocne i słabe strony tych popularnych platform DI / IoC i czy można je łatwo uznać za najlepsze? ..:
- Ninject
- Jedność
- Castle.Windsor
- Autofac
- StrukturaMapa
Czy istnieją inne frameworki DI / IoC dla C #, których tutaj nie wymieniłem?
W kontekście mojego przypadku użycia buduję aplikację kliencką WPF i infrastrukturę usług WCF / SQL, łatwość użycia (szczególnie pod względem przejrzystej i zwięzłej składni), spójną dokumentację, dobre wsparcie społeczności i wydajność - wszystko to są ważne czynniki według mojego wyboru.
Aktualizacja:
Przytoczone zasoby i zduplikowane pytania wydają się nieaktualne. Czy ktoś ze znajomością wszystkich tych ram może się zgłosić i zapewnić prawdziwy wgląd?
Zdaję sobie sprawę, że większość opinii na ten temat może być stronnicza, ale mam nadzieję, że ktoś poświęcił czas na przestudiowanie wszystkich tych ram i co najmniej ogólnie obiektywne porównanie.
Jestem skłonny przeprowadzić własne dochodzenie, jeśli nie zostało to zrobione wcześniej, ale założyłem, że było to coś, co zrobiło już kilka osób.
Druga aktualizacja:
Jeśli masz doświadczenie z więcej niż jednym kontem DI / IoC, proszę uszeregować i podsumować zalety i wady tych kontenerów, dziękuję. Nie jest to ćwiczenie polegające na odkrywaniu wszystkich niejasnych małych kontenerów, które ludzie stworzyli, szukam porównań między popularnymi (i aktywnymi) frameworkami.
Odpowiedzi:
Chociaż wyczerpująca odpowiedź na to pytanie zajmuje setki stron mojej książki , oto krótka tabela porównawcza, nad którą wciąż pracuję:
źródło
Natknąłem się na inne porównanie wydajności (najnowsza aktualizacja 10 kwietnia 2014 r.). Porównuje następujące:
Oto krótkie podsumowanie postu:
Możesz także spróbować skorzystać z biblioteki Common Service Selector Library i, mam nadzieję, wypróbować wiele opcji i sprawdzić, co będzie dla Ciebie najlepsze.
Niektóre informacje o Common Selector Library z witryny:
Aktualizacja
13.09.2011: Funq i Munq zostali dodani do listy uczestników. Wykresy również zostały zaktualizowane, a Spring.NET został usunięty z powodu niskiej wydajności.
04.11.2011: „dodano Simple Injector , wydajność jest najlepsza ze wszystkich zawodników”.
źródło
Wystarczy przeczytać ten wspaniały blog z porównaniem kontenerów .Net DI autorstwa Philipa Mat.
Przeprowadza dokładne testy porównawcze wydajności;
Poleca Autofac, ponieważ jest mały, szybki i łatwy w użyciu ... Zgadzam się. Wygląda na to, że Unity i Ninject są najwolniejsze w jego testach.
źródło
Oświadczenie: Na początku 2015 r. Istnieje świetne porównanie funkcji kontenera IoC od Jimmy'ego Bogarda , oto podsumowanie:
Porównywane pojemniki:
Scenariusz jest następujący: mam interfejs IMediator, w którym mogę wysłać pojedyncze żądanie / odpowiedź lub powiadomienie do wielu odbiorców:
Następnie utworzyłem podstawowy zestaw żądań / odpowiedzi / powiadomień:
Chciałem przyjrzeć się kilku kwestiom związanym z obsługą kontenerów dla leków generycznych:
Konfiguracja wariancji ogólnej (rejestrowanie procedur obsługi dla podstawowego INotification / tworzenie potoków żądań) Moje procedury obsługi są dość proste, po prostu wysyłają dane do konsoli:
Autofac
Ninject
Prosty wtryskiwacz
StrukturaMapa
Jedność
Windsor
źródło
W rzeczywistości istnieje mnóstwo frameworków IoC. Wygląda na to, że każdy programista próbuje napisać jeden w pewnym momencie swojej kariery. Może nie po to, by je opublikować, ale po to, aby nauczyć się wewnętrznych mechanizmów.
Osobiście wolę autofac, ponieważ jest dość elastyczny i ma odpowiednią składnię (chociaż naprawdę nie znoszę, że wszystkie metody rejestrowania są metodami rozszerzenia).
Niektóre inne frameworki:
źródło
RegisterControllers()
dla MVC), więc pomyślałem, że warto było zaprojektować tę skrzynkę. (Zostało to zaprojektowane ponad 5 lat temu.)Po sprawdzeniu najlepszego porównania, jakie do tej pory znalazłem, jest:
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
To była ankieta przeprowadzona w marcu 2010 r.
Jednym z punktów zainteresowania mnie jest to, że ludzie, którzy korzystali ze środowiska DI / IoC i polubili go / nie lubili, wydaje się, że StructureMap wychodzi na wierzch.
Także z ankiety wynika, że Castle.Windsor i StructureMap wydają się być najbardziej uprzywilejowane.
Co ciekawe, Unity i Spring.Net wydają się być popularnymi opcjami, które w większości nie są lubiane. (Rozważałem Unity z lenistwa (i odznaki / wsparcia Microsoft), ale teraz przyjrzę się bliżej Castle Windsor i StructureMap.)
Oczywiście to prawdopodobnie (?) Nie dotyczy Unity 2.0, który został wydany w maju 2010 roku.
Mam nadzieję, że ktoś inny zapewni porównanie oparte na bezpośrednim doświadczeniu.
źródło
Zobacz porównanie frameworków net-ioc w kodzie Google, w tym linfu i spring.net, których nie ma na liście podczas pisania tego tekstu.
Pracowałem z spring.net: ma wiele funkcji (aop, biblioteki, docu, ...) i jest z nim wiele doświadczenia w dotnet i java-world. Funkcje są modułowe, więc nie musisz brać wszystkich funkcji. Funkcje te są abstrakcjami typowych problemów, takich jak analiza bazy danych, rejestrowanie analizy. jednak trudno jest wykonać i debugować konfigurację IoC.
Z tego, co przeczytałem do tej pory: Gdybym musiał wybierać dla małego lub średniego projektu, użyłbym ninject, ponieważ konfiguracja ioc jest wykonywana i debuggowana w języku c #. Ale jeszcze z tym nie pracowałem. dla dużego systemu modułowego zostałbym z spring.net z powodu bibliotek abstrakcji.
źródło