Какие платформы внедрения C # / .NET Dependency Injection стоит изучить? А что вы можете сказать об их сложности и скорости.
Какие платформы внедрения C # / .NET Dependency Injection стоит изучить? А что вы можете сказать об их сложности и скорости.
Ответы:
редактировать (не автором): полный список IoC-структур доступен по адресу https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
Оригинальный ответ следует.
Я полагаю, что здесь я немного придирчив, но важно отметить, что DI (Dependency Injection) является паттерном программирования и поддерживается, но не требует, IoC (Inversion of Control) каркасом. Платформы IoC просто делают DI намного проще и предоставляют множество других преимуществ, помимо DI.
Это, как говорится, я уверен, что это то, что вы спрашивали. О IoC Frameworks; Раньше я часто использовал 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 и является универсальным контейнером. Виндзор является частью целого стека, который включает в себя монорельс, активную запись и т. Д. Сам NHibernate строится поверх Виндзора.Structure Map
имеет очень богатую и мелкозернистую конфигурацию благодаря внутреннему DSL.Autofac
представляет собой IoC-контейнер нового века со всей своей функциональной поддержкой программирования. Он также использует другой подход к управлению временем жизни, чем другие. Autofac все еще очень новый, но он ставит планку того, что возможно с IoC.Ninject
Я слышал, больше голых костей с меньшим подходом (слышал не опытный).Unity
: это от и поддерживается Microsoft (p & p). У Unity очень хорошая производительность и отличная документация. Это также легко настраивается. Здесь нет всех наворотов, скажем, Карты Замка / Строения.Итак, в целом, это действительно зависит от того, что важно для вас. Я согласился бы с другими идти и оценивать и видеть, какой из них подходит. Приятно то, что у вас есть хороший выбор пончиков, а не просто желе.
Autofac. https://github.com/autofac/Autofac Это действительно быстро и довольно хорошо. Вот ссылка со сравнениями (сделано после того, как Ninject устранил проблему утечки памяти).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninject это здорово. Это кажется очень быстрым, но я не делал никаких сравнений. Я знаю, что Нейт, автор, провел несколько сравнений между Ninject и другими структурами DI и ищет новые способы улучшить скорость работы Ninject.
Я слышал, что многие люди, которых я уважаю, говорят хорошие слова о StructureMap и CastleWindsor. Это, на мой взгляд, большая тройка, чтобы посмотреть прямо сейчас.
Я использую простой инжектор :
Simple Injector - это простая, гибкая и быстрая библиотека внедрения зависимостей, в которой используются лучшие практики, чтобы направить ваши решения к вершине успеха.
Я большой поклонник Касла. Мне нравятся возможности, которые он также предоставляет, помимо истории IoC Container. Это действительно упрощает использование NHibernate, logging, AOP и т. Д. Я также использую Binsor для конфигурации с Boo и действительно влюбился в Boo как язык из-за этого.
Я могу рекомендовать Ninject. Он невероятно быстр и прост в использовании, но только если вам не нужна конфигурация XML, иначе вам следует использовать Windsor.
Я потратил большую часть дня, борясь без успеха, чтобы получить самый простой пример Spring.NET. Никогда не мог понять, как заставить его найти мою сборку из файла XML. С другой стороны, примерно через 2 часа я смог заставить Ninject работать, включая тестирование интеграции с NUnit и MSTest.
Я использовал Spring.NET в прошлом и имел большой успех с ним. Я никогда не замечал каких-либо существенных накладных расходов, хотя сам проект, над которым мы его использовали, был довольно тяжелым. Потребовалось немного времени для прочтения документации, чтобы настроить ее.
Самое замечательное в C # заключается в том, что он шел по пути, проложенному годами разработчиками Java. Итак, мой совет, вообще говоря, при поиске инструментов такого рода, это искать надежный ответ на Java и посмотреть, существует ли еще адаптация .NET.
Поэтому, когда дело доходит до DI (а вариантов так много, это действительно дело вкуса), это Spring.NET . Кроме того, всегда разумно исследовать людей, стоящих за проектами. У меня нет проблем с предложением продуктов SourceGear для контроля версий (вне их использования), потому что я уважаю Эрика Синка. Я видел, как говорил Марк Поллак, и что я могу сказать, парень просто получает это.
В конце концов, существует множество DI-фреймворков, и вам лучше всего сделать несколько примеров проектов с несколькими из них и сделать осознанный выбор.
Удачи!
Я думаю, что хорошее место для старта - Ninject, он новый, с большим количеством настроек и очень быстрым. У Нейта, разработчика, действительно отличный сайт и отличная поддержка.
Spring.Net довольно солидный, но документация заняла некоторое время, чтобы разобраться. Autofac хорош, и, хотя .Net 2.0 поддерживается, вам нужно VS 2008 для его компиляции или использовать командную строку для сборки вашего приложения.