Какую платформу разработки .NET Dependency Injection стоит посмотреть?

Какую CY/. NET-зависимую систему инъекций стоит посмотреть? И что вы можете сказать об их сложности и скорости.

Ответ 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 имеет очень хорошую производительность и отличную документацию. Он также очень настраивается. У него нет всех колоколов и свистов, например, "Карта замка/структуры".

Итак, в целом, это действительно зависит от того, что важно для вас. Я согласен с другими в том, чтобы идти и оценивать и видеть, какой из них подходит. Приятно, что у вас есть хороший выбор пончиков, а не просто иметь желе.

Ответ 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 для его компиляции, или же использовать командную строку для создания своего приложения.