Сведения о вопросе

SOON

06:21, 27th August, 2020

Какие фреймворки внедрения зависимостей .NET стоит изучить?

Просмотров: 538   Ответов: 12

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



  Сведения об ответе

darknet

05:43, 22nd August, 2020

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

  • Замок Виндзор - замок Виндзор является лучшим из породы, зрелая инверсия контрольного контейнера доступна для .NET и Silverlight
  • Unity -облегченный расширяемый контейнер инъекции зависимостей с поддержкой инъекции конструктора, свойства и метода
  • Autofac -вызывающий привыкание контейнер .NET IoC
  • DryIoc -простой, быстрый и полностью функциональный контейнер IoC.
  • Ninject - ниндзя из .NET зависимых инжекторов
  • StructureMap -оригинальный контейнер IoC / DI для .Net
  • Spring.Net - Spring.NET-это платформа приложений с открытым исходным кодом, которая упрощает создание корпоративных .NET приложений
  • LightInject -сверхлегкий контейнер IoC
  • Простой инжектор -простой инжектор-это библиотека easy-to-use Dependency Injection (DI) для .NET 4+, которая поддерживает Silverlight 4+, Windows Phone 8, Windows 8, включая универсальные приложения и Mono.
  • Microsoft.Extensions.DependencyInjection -контейнер по умолчанию IoC для ASP.NET основных приложений.
  • Scrutor - расширения сканирования Assembly для Microsoft.Extensions.DependencyInjection.
  • Против МЭФ - управляемой платформы расширения (MEF) осуществление используемый в Visual студии.
  • TinyIoC -простой в использовании, беспроблемный, инверсионный контейнер управления для небольших проектов, библиотек и начинающих.

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


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

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

Обновление

Я использовал Ninject в своем последнем проекте, и это было абсолютное удовольствие использовать. Здесь мне немного не хватает слов, но (как мы говорим в UK) эта структура-'the Dogs'. Я бы очень рекомендовал его для любых проектов зеленых полей, где вы хотите быстро работать. Я получил все, что мне было нужно, из фантастического набора девяностых скринкастов Джастина Этериджа. Я вообще не вижу проблемы в том, чтобы перепрофилировать Ninject в существующий код, но то же самое можно сказать и о StructureMap в моем опыте. Это будет трудный выбор в будущем между этими двумя, но я предпочел бы иметь конкуренцию, а не застой, и там есть приличное количество здоровой конкуренции.

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


  Сведения об ответе

P_S_S

22:13, 26th August, 2020

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

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

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


  Сведения об ответе

DAAA

20:49, 18th August, 2020

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

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


  Сведения об ответе

appple

09:55, 25th August, 2020

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

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


  Сведения об ответе

fo_I_K

14:31, 13th August, 2020

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

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


  Сведения об ответе

VERSUION

04:17, 23rd August, 2020

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


  Сведения об ответе

VERSUION

01:15, 9th August, 2020

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


  Сведения об ответе

lool

09:24, 18th August, 2020

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


  Сведения об ответе

прога

22:45, 25th August, 2020

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


  Сведения об ответе

prince

13:30, 4th August, 2020

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

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

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

Удачи вам!


  Сведения об ответе

#hash

22:39, 3rd August, 2020

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


  Сведения об ответе

darknet

05:14, 22nd August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться