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.
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 .
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.
-
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. -
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. -
Structure Map
posiada bardzo bogatą i drobnoziarnistą konfigurację poprzez wewnętrzną DSL. -
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. -
Ninject
słyszałem jest bardziej gołe kości z mniej jest więcej podejście (słyszany nie doświadczony). - 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ę.
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
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ć.
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.
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.
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.
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.
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
Użyłem Spring.NET w przeszłości i odniósł z tym wielki sukces. Nigdy nie zauważyłem żadnych znaczących kosztów z nim, choć projekt, w którym go użyliśmy, był dość ciężki sam w sobie. Po przeczytaniu dokumentacji udało się ją skonfigurować.
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!
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.
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.
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