На какие платформы внедрения зависимостей .NET стоит обратить внимание?[закрыто]

StackOverflow https://stackoverflow.com/questions/21288

Вопрос

На какие платформы внедрения зависимостей C#/.NET стоит обратить внимание?А что можно сказать об их сложности и скорости.

Это было полезно?

Решение

редактировать (не автор):Полный список фреймворков IoC доступен по адресу https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:

  • Замок Виндзор - Castle Windsor — лучший в своем классе, зрелый контейнер Inversion of Control, доступный для .NET и Silverlight.
  • Единство - Легкий расширяемый контейнер внедрения зависимостей с поддержкой внедрения вызовов конструкторов, свойств и методов.
  • Автофак - Захватывающий контейнер .NET IoC.
  • СухойИок - Простой, быстрый и полнофункциональный контейнер IoC.
  • Нинжект - Ниндзя инжекторов зависимостей .NET.
  • СтруктураКарта — Оригинальный контейнер IoC/DI для .Net.
  • Весна.Нет - Spring.NET — это платформа приложений с открытым исходным кодом, которая упрощает создание корпоративных приложений .NET.
  • СветИнжект - Сверхлегкий IoC-контейнер.
  • Простой инжектор - Simple Injector — это простая в использовании библиотека внедрения зависимостей (DI) для .NET 4+, которая поддерживает Silverlight 4+, Windows Phone 8, Windows 8, включая универсальные приложения и Mono.
  • Microsoft.Extensions.DependencyInjection — Контейнер IoC по умолчанию для приложений ASP.NET Core.
  • Скратор — Расширения сканирования сборок для Microsoft.Extensions.DependencyInjection.
  • ПРОТИВ МЭФ — Реализация Managed Extensibility Framework (MEF), используемая Visual Studio.
  • TinyIoC - Простой в использовании и простой в использовании контейнер инверсии управления для небольших проектов, библиотек и новичков.

Оригинальный ответ следует.


Полагаю, я здесь немного придирчив, но важно отметить, что DI (внедрение зависимостей) — это шаблон программирования, который поддерживается, но не требует инфраструктуры IoC (инверсия управления).Фреймворки IoC значительно упрощают внедрение зависимостей и предоставляют множество других преимуществ помимо внедрения зависимостей.

При этом я уверен, что вы это спрашивали.О платформах IoC;Я использовал Весна.Нет и ЗамокВиндзор много, но настоящей болью в спине была вся эта надоедливая конфигурация XML, которую вам пришлось написать!Сейчас они почти все движутся в этом направлении, поэтому я использовал СтруктураКарта за последний год или около того, и с тех пор, как он перешел на свободную конфигурацию с использованием строго типизированных дженериков и реестра, мой болевой барьер при использовании IoC упал до ниже нуля!Я получаю огромное удовольствие, зная, что моя конфигурация IoC проверяется во время компиляции (по большей части), и я не получаю ничего, кроме радости от StructureMap и ее скорости.Я не скажу, что другие работали медленно, но мне было сложнее их настроить, и разочарование часто побеждало.

Обновлять

я использовал Нинжект в моем последнем проекте, и использовать его было очень приятно.Слова здесь меня немного подводят, но (как мы говорим в Великобритании) эта структура — «Собаки».Я очень рекомендую его для любых новых проектов, где вы хотите быстро начать работу.Я получил все, что мне нужно, от фантастический набор скринкастов Ninject Джастин Этередж.Я не считаю, что встраивание Ninject в существующий код вообще является проблемой, но то же самое можно сказать и о СтруктураКарта по моему опыту.Выбор между этими двумя будет трудным, но я предпочитаю конкуренцию, а не стагнацию, и существует приличная здоровая конкуренция.

Другие скринкасты IoC также можно найти. здесь, на Dimecasts.

Другие советы

Это зависит от того, что вы ищете, поскольку у каждого из них есть свои плюсы и минусы.

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

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

Автофак. https://github.com/autofac/Autofac Это действительно быстро и очень хорошо.Вот ссылка со сравнениями (сделана после того, как Ninject исправил проблему с утечкой памяти).

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

Нинджект великолепен.Кажется, это очень быстро, но я не проводил никаких сравнений.Я знаю, что Нейт, автор, сравнил Ninject с другими DI-фреймворками и ищет новые способы повышения скорости Ninject.

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

я использую Простой инжектор:

Simple Injector — это простая, гибкая и быстрая библиотека внедрения зависимостей, которая использует лучшие практики, чтобы направить ваши решения к успеху.

Я большой поклонник Касла.Мне нравятся возможности, которые он предоставляет, помимо истории IoC Container.Это действительно упрощает использование NHibernate, ведение журналов, AOP и т. д.я также использую Бинсор для конфигурации с Boo и из-за этого действительно влюбились в Boo как язык.

Могу порекомендовать Нинжект.Это невероятно быстро и просто в использовании, но только если вам не нужна конфигурация XML, иначе вам следует использовать Windsor.

Я провел большую часть дня, безуспешно пытаясь заставить работать простейший пример Spring.NET.Никогда не мог понять, как заставить его найти мою сборку из XML-файла.С другой стороны, примерно за 2 часа мне удалось заставить Ninject работать, включая тестирование интеграции с NUnit и MSTest.

я использовал Спринг.НЕТ в прошлом и добился в этом большого успеха.Я никогда не замечал каких-либо существенных накладных расходов при его использовании, хотя проект, в котором мы его использовали, сам по себе был довольно тяжелым.Прочитав текст, потребовалось совсем немного времени. документация чтобы его настроить.

Самое замечательное в C# то, что он идет по пути, проторенному годами разработчиков Java.Итак, мой совет, вообще говоря, при поиске инструментов такого рода — искать надежный ответ на Java и посмотреть, существует ли уже адаптация .NET.

Итак, когда дело доходит до DI (а вариантов так много, это действительно дело вкуса) Спринг.НЕТ.Кроме того, всегда полезно исследовать людей, стоящих за проектами.У меня нет проблем предлагать продукты SourceGear для контроля версий (кроме их использования), потому что я уважаю Эрика Синка.Я видел выступление Марка Поллака, и что я могу сказать, этот парень просто все понимает.

В конце концов, существует множество DI-фреймворков, и лучше всего выполнить несколько примеров проектов с использованием некоторых из них и сделать осознанный выбор.

Удачи!

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top