Які C # /. Структури вприскування NET-мереж варто переглянути? А що ви можете сказати про їх складність та швидкість.
Які C # /. Структури вприскування NET-мереж варто переглянути? А що ви можете сказати про їх складність та швидкість.
Відповіді:
редагувати (не від автора): Існує вичерпний перелік фреймворків IoC, доступних за посиланням https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
Оригінальна відповідь випливає.
Я припускаю, що тут я можу бути трохи прискіпливим, але важливо відзначити, що DI (залежність впорскування) - це схема програмування, що сприяє, але не вимагає, рамки IoC (інверсія управління). Рамки IoC просто полегшують DI, і вони надають безліч інших переваг над DI і вище.
Коли це було сказано, я впевнений, що це ви запитували. Про рамки IoC; Я мав звичай використовувати Spring.Net і CastleWindsor багато, але реальна біль в дупі було все , що прикрі XML конфігурації ви повинні були писати! Зараз вони майже всі рухаються таким чином, тому я використовував StructureMap останній рік або близько того, і оскільки він перемістився до вільної конфігурації за допомогою сильно набраних дженериків та реєстру, мій бар'єр болю при використанні IoC впав на нижче нуля! Я отримую абсолютний удар від того, що зараз знаю, що мій конфігурація IoC перевіряється під час компіляції (здебільшого), і мені не було нічого, крім радості від StructureMap та його швидкості. Я не скажу, що інші були повільними під час виконання, але мені було складніше налаштування, і фрустрація часто вигравала день.
Оновлення
Я використовую Ninject в своєму останньому проекті, і користуватися ним було абсолютно приємно. Слова мене тут трохи не вживають, але (як ми говоримо у Великобританії) ця рамка - "Собаки". Я настійно рекомендую його для будь-яких проектів із зелених полів, де ви хочете швидко працювати. Я отримав усе, що мені потрібно, з фантастичного набору екранів Ninject Джастіна Етередже. Я не можу побачити, що ретро-пристосування Ninject до існуючого коду взагалі є проблемою, але тоді, як я міг би сказати те саме, про StructureMap . Це буде важкий вибір, який буде просуватися між цими двома, але я вважаю за краще конкуренцію, ніж застій, і там є пристойна кількість здорової конкуренції.
Інші IoC скріншоти також можна знайти тут на Dimecasts .
Це залежить від того, що ви шукаєте, оскільки у кожного є свої плюси і мінуси.
Spring.NET
є найзрілішим, оскільки весна виходить зі світу Java. Spring має дуже багатий набір бібліотек фреймворків, які розширюють його на підтримку Web, Windows тощо.Castle Windsor
є однією з найбільш широко використовуваних в платформі .NET і має найбільшу екосистему, легко конфігурується / розширюється, має користувацьке управління протягом усього життя, підтримку AOP, має притаманну підтримку NHibernate та є надзвичайним контейнером. Віндзор є частиною цілого стека, який включає Monorail, Active Record тощо. NHibernate будується на вершині Віндзора.Structure Map
має дуже багату і дрібнозернисту конфігурацію через внутрішній DSL.Autofac
є контейнером IoC нового віку з усією притаманною йому функціональною підтримкою програмування. Він також вимагає іншого підходу до управління життям, ніж інші. Autofac все ще дуже новий, але він підштовхує планку до того, що можливо з IoC.Ninject
Я чув, що більше голих кісток, менший - більше підходу (почутий, не досвідчений).Unity
: це від Microsoft та підтримується ним (p & p). Єдність має дуже хороші показники та чудову документацію. Він також легко настроюється. У ньому немає всіх дзвіночків, які говорять на карті замку / споруди.Отже, підсумовуючи, це дійсно залежить від того, що для вас важливо. Я б погодився з іншими щодо того, щоб піти і оцінити і побачити, який з них підходить. Приємно, що ти маєш гарний вибір пончиків, а не просто мати желе.
Автофакс. https://github.com/autofac/Autofac Це дійсно швидко і досить добре. Ось посилання з порівняннями (зроблені після того, як Ninject вирішив проблему витоку пам'яті).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninject чудовий. Це здається дуже швидким, але я не робив жодних порівнянь. Я знаю, Нейт, автор, провів деякі порівняння між Ninject та іншими рамками DI і шукає більше способів поліпшити швидкість Ninject.
Я чув багато людей, яких я поважаю, говорять добрі речі про StructureMap та CastleWindsor. На мій погляд, це велика трійка, на яку зараз потрібно дивитися.
Я використовую простий інжектор :
Простий інжектор - це проста, гнучка та швидка бібліотека ін'єкційних залежностей, яка використовує кращу практику, щоб направляти ваші рішення до ями успіху.
Я величезний шанувальник Замку. Мені подобаються засоби, які він також пропонує поза історією IoC Container. Це дійсно simplfies з допомогою NHibernate, лісозаготівлі, АОП, і т.д. Я також використовувати Binsor для конфігурації з Boo і дійсно закохалася в Boo як мову з - за нього.
Я можу порекомендувати Ninject. Це неймовірно швидкий і простий у використанні, але тільки якщо вам не потрібна конфігурація XML, інакше слід використовувати Windsor.
Більшу частину дня я провів без зусиль, щоб отримати найпростіший приклад Spring.NET. Ніколи не вдалося зрозуміти, як отримати його для пошуку моєї збірки з файлу XML. Приблизно за дві години мені вдалося змусити Ninject працювати, включаючи тестування інтеграції як з NUnit, так і з MSTest.
Раніше я використовував Spring.NET і мав великий успіх у ньому. Я ніколи не помічав жодних суттєвих витрат із цим, хоча проект, на якому ми його використовували, був досить важким сам по собі. Прочитати документацію було потрібно лише небагато часу, щоб налаштувати її.
Чудова річ у C # - це те, що він слідує шляхом, який пройшли роки розробників Java перед ним. Отже, моя порада, загалом кажучи, шукаючи інструменти подібного характеру, - це шукати ґрунтовну відповідь Java і перевірити, чи існує ще адаптація .NET.
Тож коли мова заходить про DI (а варіантів існує так багато, це справді питання смаку) є Spring.NET . Крім того, завжди розумно досліджувати людей, які стоять за проектами. У мене немає жодних проблем, щоб запропонувати продукти SourceGear для контролю джерел (поза їх використанням), оскільки я поважаю Еріка Сінка. Я бачив, як Марк Поллак говорив, і що я можу сказати, хлопець просто це отримує.
Зрештою, є багато фреймворків DI, і найкраще зробити, щоб зробити кілька зразкових проектів з кількома з них і зробити освічений вибір.
Удачі!
Я думаю, що хороше місце для початку - це з Ninject, воно нове і врахувало багато тонкої настройки і дійсно швидко. Нейт, розробник, справді має чудовий сайт та чудову підтримку.
Spring.Net досить солідний, але документація потребувала певного часу. Autofac - це добре, і хоча .Net 2.0 підтримується, вам потрібен VS 2008 для його компіляції, або ж використовуйте командний рядок для створення програми.