Які рамки інжекційного введення .NET варто розглянути? [зачинено]


386

Які C # /. Структури вприскування NET-мереж варто переглянути? А що ви можете сказати про їх складність та швидкість.


13
Показник IoC Container Benchmark - порівняння продуктивності містить таблиці порівняння продуктивності та особливостей для 20+ продуктів і постійно оновлює їх. Рекомендує простий інжектор
Майкл Фрейджім

Я ціную Ninject & Maestro. Я щасливий, що найкраще оцінена відповідь вважає Нінжект "абсолютною насолодою"
Разван Думітру,

6
Я наголошую, що перш ніж заглянути в контейнери IoC, вам слід обійтися без одного. Виконуйте проводку та ін'єкцію вручну, це зовсім не складно або взагалі не потрібно багато коду, якщо у вас немає справді складних або великих систем. Коли ти відчуєш, що ти це розумієш і що це стає комерційним, то ти будеш краще підходити до розуміння того, який тип каркасу може тобі допомогти. але немає жодного правила, яке говорить про те, що проект ОБОВ'ЯЗКОВО повинен мати контейнер IoC просто для того, щоб мати можливість робити DI належним чином.
сара

1
Почніть з жодного. Створіть графік необхідних об'єктів вручну. Різні рамки мають різні підходи, що залежить від ваших потреб. Перш ніж вибрати одну, вам потрібно визначити, які функції вам найбільше потрібні.
Фабіо

Оскільки dotnetcore - це майбутнє, ви можете також дотримуватися його вбудованої підтримки DI. Це дуже добре і легко налаштовується.
ATL_DEV

Відповіді:


339

редагувати (не від автора): Існує вичерпний перелік фреймворків IoC, доступних за посиланням https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :

  • Замок Віндзор - Замок Віндзор найкращий з породи, зрілий інверсія контейнера управління, доступний для .NET та Silverlight
  • Єдність - Легкий контейнер для вприскування з розширюваною залежністю з підтримкою впорскування конструктора, властивості та методу
  • Autofac - Захоплюючий контейнер .NET IoC
  • DryIoc - простий, швидкий повнофункціональний контейнер IoC.
  • Ninject - Ніндзя інжекторів залежності .NET
  • StructureMap - оригінальний контейнер IoC / DI для .Net
  • Spring.Net - Spring.NET - це програма з відкритим кодом, що полегшує побудову корпоративних програм .NET
  • LightInject - ультралегкий контейнер IoC
  • Простий інжектор - Простий інжектор - це проста у користуванні бібліотека Dependency Injection (DI) для .NET 4+, яка підтримує Silverlight 4+, Windows Phone 8, Windows 8, включаючи універсальні додатки та Mono.
  • Microsoft.Extensions.DependencyInjection - контейнер IoC за замовчуванням для програм ASP.NET Core.
  • Scrutor - збірка розширень для сканування для Microsoft.Extensions.DependencyInjection.
  • Реалізація VS MEF - керованої рамки розширення (MEF), що використовується Visual Studio.
  • TinyIoC - простий у використанні, без клопотів, інверсія контейнера управління для невеликих проектів, як бібліотеки, так і для початківців.

Оригінальна відповідь випливає.


Я припускаю, що тут я можу бути трохи прискіпливим, але важливо відзначити, що DI (залежність впорскування) - це схема програмування, що сприяє, але не вимагає, рамки IoC (інверсія управління). Рамки IoC просто полегшують DI, і вони надають безліч інших переваг над DI і вище.

Коли це було сказано, я впевнений, що це ви запитували. Про рамки IoC; Я мав звичай використовувати Spring.Net і CastleWindsor багато, але реальна біль в дупі було все , що прикрі XML конфігурації ви повинні були писати! Зараз вони майже всі рухаються таким чином, тому я використовував StructureMap останній рік або близько того, і оскільки він перемістився до вільної конфігурації за допомогою сильно набраних дженериків та реєстру, мій бар'єр болю при використанні IoC впав на нижче нуля! Я отримую абсолютний удар від того, що зараз знаю, що мій конфігурація IoC перевіряється під час компіляції (здебільшого), і мені не було нічого, крім радості від StructureMap та його швидкості. Я не скажу, що інші були повільними під час виконання, але мені було складніше налаштування, і фрустрація часто вигравала день.

Оновлення

Я використовую Ninject в своєму останньому проекті, і користуватися ним було абсолютно приємно. Слова мене тут трохи не вживають, але (як ми говоримо у Великобританії) ця рамка - "Собаки". Я настійно рекомендую його для будь-яких проектів із зелених полів, де ви хочете швидко працювати. Я отримав усе, що мені потрібно, з фантастичного набору екранів Ninject Джастіна Етередже. Я не можу побачити, що ретро-пристосування Ninject до існуючого коду взагалі є проблемою, але тоді, як я міг би сказати те саме, про StructureMap . Це буде важкий вибір, який буде просуватися між цими двома, але я вважаю за краще конкуренцію, ніж застій, і там є пристойна кількість здорової конкуренції.

Інші IoC скріншоти також можна знайти тут на Dimecasts .


1
Приємно бачити якісний, продуманий відповідь, що стосується одного лайнера. Ви переконали мене перевірити StructureMap.
Кріс Марасті-Георг

7
Приємно, але, щоб бути справедливим - зараз у Віндзора є дуже хороший повноцінний інтерфейс.
Кшиштоф Козміч

Чи можете ви пояснити, які рамки IoC надають, крім простої реалізації DI?
fearofawhackplanet

@fearofawhackplanet Одне з єдиних речей, який може зробити контейнер IoC, що неможливо зробити з ІД бідолахи - це перехоплення . Хороший підсумок тут: kenneth-truyers.net/2013/05/16/…
Mathieu Guindon

1
Я прочитав кілька джерел , які говорять , що Ninject є найповільнішим palmmedia.de/blog/2011/8/30 / ... і stackoverflow.com/questions/4581791 / ...
Люк Т О'Брайен

77

Це залежить від того, що ви шукаєте, оскільки у кожного є свої плюси і мінуси.

  1. Spring.NETє найзрілішим, оскільки весна виходить зі світу Java. Spring має дуже багатий набір бібліотек фреймворків, які розширюють його на підтримку Web, Windows тощо.
  2. Castle Windsorє однією з найбільш широко використовуваних в платформі .NET і має найбільшу екосистему, легко конфігурується / розширюється, має користувацьке управління протягом усього життя, підтримку AOP, має притаманну підтримку NHibernate та є надзвичайним контейнером. Віндзор є частиною цілого стека, який включає Monorail, Active Record тощо. NHibernate будується на вершині Віндзора.
  3. Structure Map має дуже багату і дрібнозернисту конфігурацію через внутрішній DSL.
  4. Autofacє контейнером IoC нового віку з усією притаманною йому функціональною підтримкою програмування. Він також вимагає іншого підходу до управління життям, ніж інші. Autofac все ще дуже новий, але він підштовхує планку до того, що можливо з IoC.
  5. Ninject Я чув, що більше голих кісток, менший - більше підходу (почутий, не досвідчений).
  6. Найбільший дискримінатор Unity: це від Microsoft та підтримується ним (p & p). Єдність має дуже хороші показники та чудову документацію. Він також легко настроюється. У ньому немає всіх дзвіночків, які говорять на карті замку / споруди.

Отже, підсумовуючи, це дійсно залежить від того, що для вас важливо. Я б погодився з іншими щодо того, щоб піти і оцінити і побачити, який з них підходить. Приємно, що ти маєш гарний вибір пончиків, а не просто мати желе.


4
Autofac насправді не такий вже й новий, він старший за Unity :)
Ніколас Блюмхардт

1
Я сказав, що це новіше, ніж Єдність? Я сказав, що це нове століття ... тобто я мав на увазі функціональний характер. Добре, що я сказав, що це все ще дуже нове, що я мав на увазі, хоча це природа не те, що ІТ було новим. :-)
Блок Глена

2
@Krzysztof - Я вважаю Unity мертвою легкою (принаймні, коли вільно налаштований у коді). Що тобі було боляче?
TrueWill


6
Ось цікавий орієнтир ефективності: palmmedia.de/Blog/2011/8/30/…
Стівен

35

Автофакс. https://github.com/autofac/Autofac Це дійсно швидко і досить добре. Ось посилання з порівняннями (зроблені після того, як Ninject вирішив проблему витоку пам'яті).

http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html


Мені подобається автофакс, але це, звичайно, не швидко. Як Стівен посилався
Серж Саган

18

Ninject чудовий. Це здається дуже швидким, але я не робив жодних порівнянь. Я знаю, Нейт, автор, провів деякі порівняння між Ninject та іншими рамками DI і шукає більше способів поліпшити швидкість Ninject.

Я чув багато людей, яких я поважаю, говорять добрі речі про StructureMap та CastleWindsor. На мій погляд, це велика трійка, на яку зараз потрібно дивитися.


1
Ninject популярний, але це, звичайно, НЕ швидкий. Це насправді один із найповільніших там: palmmedia.de/Blog/2011/8/30/…
Серж Саган

13

Я використовую простий інжектор :

Простий інжектор - це проста, гнучка та швидка бібліотека ін'єкційних залежностей, яка використовує кращу практику, щоб направляти ваші рішення до ями успіху.


4
Остерігайтеся, коли хтось вважає, що локатор сервісу є антидіапазоном
Philippe

4
Стівен також є автором простого інжектора ... тому це своєрідна спам-відповідь ... особливо, що для цього він використовував альт-акаунти ... Хоча простий інжектор досить швидкий: palmmedia.de/Blog/2011/ 8/30 /…
Серж Саган

8

Я величезний шанувальник Замку. Мені подобаються засоби, які він також пропонує поза історією IoC Container. Це дійсно simplfies з допомогою NHibernate, лісозаготівлі, АОП, і т.д. Я також використовувати Binsor для конфігурації з Boo і дійсно закохалася в Boo як мову з - за нього.


5

Я можу порекомендувати Ninject. Це неймовірно швидкий і простий у використанні, але тільки якщо вам не потрібна конфігурація XML, інакше слід використовувати Windsor.


1
НЕ швидкий! Це одна з найповільніших рамок DI! palmmedia.de/Blog/2011/8/30/…
Серж Саган

@Serj Sagan Якщо чесно, ці результати давні (6 років зараз)
Тимофій Канскі


5

Більшу частину дня я провів без зусиль, щоб отримати найпростіший приклад Spring.NET. Ніколи не вдалося зрозуміти, як отримати його для пошуку моєї збірки з файлу XML. Приблизно за дві години мені вдалося змусити Ninject працювати, включаючи тестування інтеграції як з NUnit, так і з MSTest.


4

Раніше я використовував Spring.NET і мав великий успіх у ньому. Я ніколи не помічав жодних суттєвих витрат із цим, хоча проект, на якому ми його використовували, був досить важким сам по собі. Прочитати документацію було потрібно лише небагато часу, щоб налаштувати її.


2

Чудова річ у C # - це те, що він слідує шляхом, який пройшли роки розробників Java перед ним. Отже, моя порада, загалом кажучи, шукаючи інструменти подібного характеру, - це шукати ґрунтовну відповідь Java і перевірити, чи існує ще адаптація .NET.

Тож коли мова заходить про DI (а варіантів існує так багато, це справді питання смаку) є Spring.NET . Крім того, завжди розумно досліджувати людей, які стоять за проектами. У мене немає жодних проблем, щоб запропонувати продукти SourceGear для контролю джерел (поза їх використанням), оскільки я поважаю Еріка Сінка. Я бачив, як Марк Поллак говорив, і що я можу сказати, хлопець просто це отримує.

Зрештою, є багато фреймворків DI, і найкраще зробити, щоб зробити кілька зразкових проектів з кількома з них і зробити освічений вибір.

Удачі!


2

Я думаю, що хороше місце для початку - це з Ninject, воно нове і врахувало багато тонкої настройки і дійсно швидко. Нейт, розробник, справді має чудовий сайт та чудову підтримку.


Чому ти кажеш, що це швидко ??? Це одна з найповільніших, що є! palmmedia.de/Blog/2011/8/30/…
Серж Саган

2

Spring.Net досить солідний, але документація потребувала певного часу. Autofac - це добре, і хоча .Net 2.0 підтримується, вам потрібен VS 2008 для його компіляції, або ж використовуйте командний рядок для створення програми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.