Which.NET frameworki Dependency Injection są warte obejrzenia? [zamknięte]

Które frameworki C#/. Net Dependency Injection warto sprawdzić? I co można powiedzieć o ich złożoności i szybkości.

Author: John Saunders, 2008-08-22

12 answers

Edit (nie przez autora): pełna lista frameworków IoC dostępna jest pod adresem https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :

  • Castle Windsor-Castle Windsor to najlepszy w Rasie, Dojrzała Inwersja kontenera sterującego dostępnego dla. NET i Silverlight [10]}
  • Unity - lekki rozszerzalny kontener iniekcji zależności z obsługą konstruktora, właściwości i wywołania metody wstrzyknięcie
  • Autofac - uzależniający kontener. NET
  • DryIoc - prosty, szybki i w pełni funkcjonalny kontener IoC.
  • Ninject - ninja z. NET dependency injectors
  • StructureMap - oryginalny kontener IoC / DI dla. Net
  • Spring.Net - Spring.NET jest to framework open source, który ułatwia tworzenie aplikacji. NET dla przedsiębiorstw [10]}
  • LightInject - ultra lekki Pojemnik IoC
  • Simple Injector - Simple Injector jest łatwą w użyciu biblioteką injekcji zależności (DI) dla.Net 4+, która obsługuje Silverlight 4+, Windows Phone 8, Windows 8 w tym Universal apps i Mono.
  • Microsoft.Rozszerzenia.DependencyInjection - domyślny kontener IoC dla ASP.NET podstawowe aplikacje.
  • Scrutor - rozszerzenia skanujące Assembly dla Microsoft.Rozszerzenia./ Align = "left" /
  • VS MEF - implementacja Managed Extensibility Framework (MEF) używana przez Visual Studio.
  • TinyIoC - Łatwy w użyciu, bezproblemowy, Inwersja kontenera sterującego dla małych projektów, bibliotek i początkujących.

Oryginalna odpowiedź jest następująca.


Przypuszczam, że mogę być trochę wybredny, ale ważne jest, aby zauważyć, że di (Dependency Injection) jest wzorcem programowania i jest ułatwiony przez, ale nie wymaga, IoC (Inwersja sterowania) ramy. Frameworki IoC po prostu znacznie ułatwiają DI i zapewniają wiele innych korzyści poza DI.

To powiedziawszy, jestem pewien, że o to pytałeś. O frameworkach IoC; kiedyś używałem Spring.Net i CastleWindsor dużo, ale prawdziwym bólem w tyle było to wszystko, co brzydkie XML config trzeba było napisać! Wszystkie poruszają się teraz w ten sposób, więc używam StructureMap Przez ostatni rok lub dłużej, a ponieważ przeniósł się do fluent config using strongly typed generics and a registry, my pain barrier in using IoC spadła do poniżej zera! Dostaję absolutnego kopa wiedząc teraz, że mój IOC config jest sprawdzany w czasie kompilacji (w większości przypadków) i nie miałem nic oprócz radości z StructureMap i jego szybkości. Nie powiem, że inne były powolne w czasie pracy, ale były dla mnie trudniejsze do skonfigurowania, a frustracja często wygrywała dzień.

Update

Używam Ninject na moim najnowszy projekt i korzystanie z niego było absolutną przyjemnością. Słowa trochę mnie tu zawodzą, ale (jak mówimy w Wielkiej Brytanii) ten framework to "psy". Gorąco polecam go do wszelkich projektów zielonych pól, w których chcesz szybko działać. Mam wszystko, czego potrzebowałem z fantastycznego zestawu screencastów Ninject Justina Etheredge ' a. Nie widzę, aby retro-dopasowanie Ninject do istniejącego kodu było problemem, ale to samo można powiedzieć o StructureMap z mojego doświadczenia. To będzie trudny wybór między tymi dwoma, ale wolę konkurencję niż stagnację i tam jest przyzwoita ilość zdrowej konkurencji.

Inne screencasty IoC można również znaleźć tutaj na Dimecasts .

 309
Author: RobertTheGrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-24 05:04:55

To zależy od tego, czego szukasz, ponieważ każdy z nich ma swoje plusy i minusy.

  1. Spring.NET jest najbardziej dojrzały, ponieważ pochodzi z wiosny ze świata Javy. Spring posiada bardzo bogaty zestaw bibliotek frameworkowych, które rozszerzają go o obsługę sieci Web, Windows itp.
  2. Castle Windsor jest jednym z najczęściej używanych w platformie. NET i ma największy ekosystem , jest wysoce konfigurowalny / rozszerzalny, ma niestandardowe zarządzanie życiem, wsparcie AOP, ma nieodłączne Obsługa NHibernate i jest całym niesamowitym kontenerem. Windsor jest częścią całego stosu, który obejmuje Monorail, Active Record itp. Sam NHibernate buduje się na szczycie Windsoru.
  3. Structure Map posiada bardzo bogatą i drobnoziarnistą konfigurację poprzez wewnętrzną DSL.
  4. Autofac jest kontenerem IoC nowej ery z nieodłącznym wsparciem dla programowania funkcyjnego. Ma również inne podejście do zarządzania życiem niż inne. Autofac jest nadal bardzo nowy, ale popycha poprzeczkę na tym, co jest możliwe z IoC.
  5. Ninject słyszałem jest bardziej gołe kości z mniej jest więcej podejście (słyszany nie doświadczony).
  6. największy dyskryminator z Unity jest: jest od I obsługiwane przez Microsoft (p&p). Unity ma bardzo dobre wykonanie i świetną dokumentację. Jest również wysoce konfigurowalny. Nie ma wszystkich dzwonków i gwizdków z mapy say Castle / Structure.

Więc podsumowując, to naprawdę zależy na to, co jest dla Ciebie ważne. Zgodzę się z innymi co do tego, że będę oceniał i sprawdzał, który z nich pasuje. Fajną rzeczą jest to, że masz ładny wybór pączków, a nie tylko musisz mieć galaretkę.

 75
Author: Glenn Block,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-27 06:05:08
 35
Author: Pete,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-23 09:15:12

Ninject jest świetny. Wydaje się to bardzo szybkie, ale nie zrobiłem żadnych porównań. Wiem, że Nate, autor, dokonał pewnych porównań między Ninject i innymi frameworkami DI i szuka więcej sposobów na poprawę szybkości Ninject.

Słyszałem wiele ludzi, których szanuję, mówiących dobre rzeczy o StructureMap i CastleWindsor. To, według mnie, to wielka trójka, na którą warto teraz patrzeć.

 18
Author: ScottKoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-21 22:00:12

Używam prostego wtryskiwacza :

Simple Injector jest łatwą, elastyczną i szybką biblioteką wtrysku zależności, która wykorzystuje najlepsze praktyki, aby poprowadzić Twoje rozwiązania w kierunku dołu sukcesu.

 12
Author: Steven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-20 11:18:55

Jestem wielkim fanem Castle ' a. Uwielbiam udogodnienia, które zapewnia również poza historią kontenerów IoC. To naprawdę upraszcza korzystanie z NHibernate, logging, AOP itp. Używam również Binsor do konfiguracji z Boo i naprawdę zakochałem się w Boo jako języku z tego powodu.

 8
Author: Chris Canal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 09:39:07

Mogę polecić Ninject. Jest niezwykle szybki i łatwy w użyciu, ale tylko jeśli nie potrzebujesz konfiguracji XML, w przeciwnym razie powinieneś użyć Windsor.

 5
Author: Julio César,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 00:40:09

Spędziłem większą część dnia walcząc bez powodzenia, aby uzyskać najprostszy Spring.NET przykład pracy. Nigdy nie mogłem dowiedzieć się, jak go znaleźć mój zespół z pliku XML. Z drugiej strony, w ciągu około 2 godzin udało mi się uruchomić Ninject, w tym przetestować integrację zarówno z NUnit, jak i MSTest.

 5
Author: outinsun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-22 17:35:59
 4
Author: Jason Sparks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-21 22:06:23

Wspaniałą rzeczą w C# jest to, że podąża ścieżką pokonaną przed laty przez programistów Javy. Tak więc, moja rada, ogólnie rzecz biorąc, szukając narzędzi tego rodzaju, to szukać solidnej odpowiedzi Javy i sprawdzić, czy istnieje jeszcze adaptacja. NET.

Więc jeśli chodzi o DI (i jest tak wiele opcji tam, to naprawdę jest kwestia gustu) jest Spring.NET . dodatkowo, zawsze mądrze jest badać ludzi stojących za projektami. Nie mam problemu z sugerowaniem Produkty SourceGear do kontroli źródeł (poza ich używaniem), ponieważ szanuję Erica Sinka. Widziałem, jak Mark Pollack mówił i co mogę powiedzieć, facet po prostu to rozumie.

W końcu, istnieje wiele frameworków DI i najlepiej jest zrobić kilka przykładowych projektów z kilku z nich i dokonać świadomego wyboru.

Powodzenia!

 2
Author: Ian Patrick Hughes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-21 22:07:37

Myślę, że dobrym miejscem na początek jest Ninject, jest nowy i wziął pod uwagę wiele dostrajania i jest naprawdę szybki. Nate, deweloper, naprawdę ma świetną stronę i Świetne wsparcie.

 2
Author: Rob Bazinet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-22 00:37:04

Spring.Net jest dość solidny, ale dokumentacja zajęła trochę czasu, aby przebrnąć przez. Autofac jest dobry, i chociaż. Net 2.0 jest obsługiwany, trzeba VS 2008 skompilować go, lub użyć wiersza poleceń do budowania aplikacji.

 2
Author: David Robbins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 14:01:30