Какую CY/. NET-зависимую систему инъекций стоит посмотреть? И что вы можете сказать об их сложности и скорости.
Какую платформу разработки .NET Dependency Injection стоит посмотреть?
Ответ 1
изменить (не автором): Существует полный список рамок IoC, доступных по адресу https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc
- Castle Windsor - Castle Windsor - лучший из породы, зрелый контейнер Inversion of Control, доступный для .NET и Silverlight.
- Unity - Легкий расширяемый контейнер для инъекций зависимостей с поддержкой ввода конструктора, свойства и метода.
- Autofac - Захватывающий контейнер .NET IoC
- DryIoc - Простой, быстрый весь полнофункциональный контейнер IoC.
- Ninject - ниндзя инжекторов зависимостей .NET
- StructureMap - Оригинальный контейнер IoC/DI для .Net
- Spring.Net - Spring.NET - это платформа приложений с открытым исходным кодом, которая упрощает создание приложений .NET.
- LightInject - сверхлегкий контейнер IoC
- Простой инжектор - Simple Injector - это простая в использовании библиотека Injection (DI) для платформы .NET 4+, которая поддерживает Silverlight 4+, Windows Phone 8, Windows 8, включая универсальные приложения и моно.
- Microsoft.Extensions.DependencyInjection - контейнер IoC по умолчанию для основных приложений ASP.NET.
- Scrutor - Расширения для сканирования приложений для Microsoft.Extensions.DependencyInjection.
- VS MEF - реализация управляемой расширяемости (MEF), используемая Visual Studio.
- TinyIoC - Простая в использовании, без проблем, Inversion Control Container для небольших проектов, библиотек и начинающих.
Далее следует исходный ответ.
Я полагаю, что я мог бы быть немного придирчивым здесь, но важно отметить, что DI (Dependency Injection) является шаблоном программирования и ему облегчается структура IoC (инверсия управления), но не требуется. Рамки IoC просто делают DI намного проще, и они предоставляют множество других преимуществ помимо DI.
Сказав это, я уверен, что вы спрашивали. О платформах IoC; Я использовал Spring.Net и CastleWindsor a много, но реальная боль взади была все, что надоедливый XML-конфигурации, которую вы должны были писать! Они почти все двигаются таким образом, поэтому я использовал StructureMap за последний год или около того, и так как он переместился к свободной конфигурации с использованием типично типизированных дженериков и реестра, мой болевой барьер при использовании IoC упал до нуля! Я получаю абсолютный удар от знания теперь, когда моя конфигурация IoC проверяется во время компиляции (по большей части), и у меня не было ничего, кроме радости от StructureMap и его скорости. Я не буду говорить, что другие были медленными во время работы, но мне было сложнее настраивать, и разочарование часто выигрывало день.
Обновить
Я использую Ninject в своем последнем проекте, и это было безусловное удовольствие от использования. Слова меня немного не смущают, но (как мы говорим в Великобритании) эта структура - "Собаки". Я бы очень рекомендовал его для любых проектов с зелеными полями, в которых вы хотите быстро и быстро работать. Я получил все, что мне нужно от фантастического набора Ninject screencasts от Justin Etheredge. Я не вижу, что ретроинтегрирующий Ninject в существующий код является проблемой вообще, но то же самое можно сказать о StructureMap в мой опыт. Это будет сложный выбор, идущий вперед между этими двумя, но я предпочел бы конкуренцию, чем стагнацию, и там было достойное количество здоровой конкуренции.
Другие IoC screencasts также можно найти здесь, в Dimecasts.
Ответ 2
Это зависит от того, что вы ищете, поскольку каждый из них имеет свои плюсы и минусы.
-
Spring.NET
является самым зрелым, поскольку он выходит из Spring из мира Java. Spring имеет очень богатый набор библиотек фреймворков, которые расширяют его для поддержки Web, Windows и т.д. -
Castle Windsor
является одним из наиболее широко используемых в платформе .NET и имеет самую большую экосистему, имеет высокую настраиваемость/расширяемость, имеет индивидуальное управление жизненным циклом, поддержку AOP, имеет встроенную поддержку NHibernate и это все вокруг удивительный контейнер. Windsor является частью целого стека, который включает в себя монорельс, активную запись и т.д. NHibernate сам построен на вершине Виндзора. -
Structure Map
имеет очень богатую и мелкозернистую конфигурацию через внутренний DSL. -
Autofac
- это контейнер IoC нового возраста, при этом он поддерживает функциональное программирование. Он также использует другой подход к управлению временем жизни, чем другие. Autofac все еще очень новенький, но он толкает панель на то, что возможно с IoC. -
Ninject
Я слышал, что более голые кости с меньшим приближением (слышал, не слышал). - Самый большой дискриминатор
Unity
: от Microsoft и поддерживается Microsoft (p & p). Unity имеет очень хорошую производительность и отличную документацию. Он также очень настраивается. У него нет всех колоколов и свистов, например, "Карта замка/структуры".
Итак, в целом, это действительно зависит от того, что важно для вас. Я согласен с другими в том, чтобы идти и оценивать и видеть, какой из них подходит. Приятно, что у вас есть хороший выбор пончиков, а не просто иметь желе.
Ответ 3
Autofac. https://github.com/autofac/Autofac Это очень быстро и очень хорошо. Вот ссылка со сравнением (после того, как Ninject исправил проблему с утечкой памяти).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ответ 4
Ninject велик. Это кажется очень быстрым, но я не делал никаких сравнений. Я знаю, что Nate, автор, сделал некоторые сравнения между Ninject и другими структурами DI и ищет больше способов улучшить скорость Ninject.
Я слышал много людей, которых я уважаю, говорю хорошие вещи о StructureMap и CastleWindsor. Те, на мой взгляд, представляют большую тройку, чтобы посмотреть прямо сейчас.
Ответ 5
Я использую Простой инжектор:
Простой инжектор - это простая, гибкая и быстрая библиотека для инъекций, которая использует лучшие практики, чтобы направлять ваши решения в сторону успеха.
Ответ 6
Я большой поклонник замка. Мне нравятся объекты, которые он также предоставляет за пределами истории контейнеров IoC. Это действительно упрощает использование NHibernate, logging, АОП и т.д. Я также использую Binsor для конфигурации с Boo и действительно влюбился в Boo как язык из-за этого.
Ответ 7
Я могу порекомендовать Ninject. Это невероятно быстро и просто в использовании, но только если вам не нужна конфигурация XML, иначе вы должны использовать Windsor.
Ответ 8
Я использовал Spring.NET в прошлом и имел большой успех с ним. Я никогда не замечал существенных накладных расходов, хотя проект, который мы использовали, был довольно тяжелым сам по себе. Прошло немного времени, прочитав documentation, чтобы настроить его.
Ответ 9
Я потратил большую часть дня, изо всех сил пытаясь получить простейший пример Spring.NET. Не мог бы понять, как заставить его найти мою сборку из XML файла. С другой стороны, через 2 часа мне удалось запустить Ninject, включая интеграцию тестирования с NUnit и MSTest.
Ответ 10
Самое замечательное в С# заключается в том, что он идет по пути, избитому годами разработчиков Java перед этим. Итак, мой совет, вообще говоря, при поиске инструментов такого рода, заключается в том, чтобы искать солидный ответ Java и посмотреть, существует ли еще адаптация .NET.
Итак, когда дело доходит до DI (и там так много вариантов, это действительно вопрос вкуса) Spring.NET. Кроме того, всегда разумно исследовать людей, стоящих за проектами. У меня нет проблем с предложением продуктов SourceGear для управления версиями (вне их использования), потому что я уважаю Эрика Санка. Я видел, как Марк Поллак говорил, и что я могу сказать, парень просто получает его.
В конце концов, существует множество инфраструктур DI, и лучше всего сделать некоторые примеры проектов с несколькими из них и сделать образованный выбор.
Удачи!
Ответ 11
Я думаю, что неплохо начать с Ninject, он новенький и учитывает много тонкой настройки и очень быстро. Nate, разработчик, действительно имеет отличный сайт и отличную поддержку.
Ответ 12
Spring.Net достаточно прочная, но документация заняла некоторое время, чтобы пройти. Autofac хорош, и хотя .Net 2.0 поддерживается, вам нужно VS 2008 для его компиляции, или же использовать командную строку для создания своего приложения.