Сравнение Castle Windsor, Unity и StructureMap

В следующем выражении выражение Krzysztofs, что Windsor делает намного больше чем другие IoC, я хотел понять, как эти IoCs складываются друг против друга и преимущества/дополнительные возможности, которые предоставляет замок Windsor.

Есть ли какие-либо сравнения? Может ли кто-нибудь помочь мне понять дополнительные функции, которые Castle Windsor предоставляет для других IoCs

Ответ 1

Смотрите здесь и здесь для довольно тщательного технического сравнение нескольких контейнеров IoC, хотя в настоящее время они несколько устарели (они находятся до Windsor 2.0)

Однако, я не думаю, что на самом деле есть какие-то жизненно важные функции, которые предлагает Windsor, а другие контейнеры - нет. Windsor, StructureMap, Spring.NET уже несколько лет существуют и используются во многих проектах за эти годы, поэтому они очень зрелы. Более новые контейнеры, такие как Autofac, Unity, Ninject и SimpleInjector основывается на предыдущем опыте поэтому у них также не будет недостатка в этих жизненно важных функциях.

Теперь более субъективная часть ответа: мне нравится думать, что Windsor имеет приятное сочетание модулей юзабилити, расширяемости и интеграции.

Удобство использования: например, вы можете использовать регистрацию XML и/или кода (он также имеет свободный свободный API как и большинство контейнеров в настоящее время).

Расширяемость: Множество точек расширения, которые вы можете использовать для настройки или переопределения практически любого поведения по умолчанию.

Интеграция: Windsor имеет множество объектов (модулей), которые позволяют легко интегрироваться с другими фреймворками/библиотеками. Другие интеграции включают ASP.NET MVC, MonoRail, Workflow Foundation, NServiceBus, MassTransit, Rhino Service Bus, Quartz.Net, SolrNet, SolrSharp, Службы факса Windows.

Эта серия статей охватывает множество тонкостей и точек распространения Виндзора.

Обратите внимание, что я не говорю, что другие контейнеры не предлагают похожие вещи! Даже если вы выбрали один из них, и позже вы узнали, что ему не хватает интеграции, обычно нетрудно закодировать его самостоятельно.

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

Ответ 2

Для меня есть две особенности убийцы Виндзора, которые я не считаю большинством других контейнеров.

  • Возможность работать в агностическом режиме контейнера - это означает, что ваш контейнер может загружать весь код для вас, и вы можете в полной мере использовать его богатые возможности, не ссылаясь ни на какие сборки Castle. *. dll, -инфраструктурные сборки. Это связано с такими функциями, как Lazy Component Loaders, DynamicParameters и Typed Factory Facility, которые не ограничивают вас возможностями использования расширенных возможностей контейнера, избегая при этом слоя интеграции с использованием ручного кодирования или используя Service Locator, который как @ploeh написал анти-шаблон.

  • очень богатая экосистема расширяемости/расширения, которая может дать вам действительно мощные возможности и значительно уменьшить количество сантехники, которое вы должны написать. Это может показаться не очень мощным, но вы по достоинству оцените его, как только вы воспользуетесь такими вещами, как WCF Facility в одном проекте, а затем в другом вы не сможете его использовать. Часть расширяемости означает, что, хотя Windsor не пытается (это его цель дизайна), чтобы решить все проблемы, которые могут возникнуть из коробки, она очень расширяема, а это означает, что вы можете настраивать и перекручивать ее, чтобы делать практически все, что вам может понадобиться.

Кроме того, мне просто нравится, как Windsor работает в значительной степени, как ожидалось (вопреки некоторым другим контейнерам) и как он решает маленькие вещи. Например, создание украшенных услуг очень просто. Мне также очень нравится бесплатный API регистрации, который очень хорошо работает как для простых сценариев, так и не слишком извращен и усложнен, когда вы хотите сделать что-то продвинутое. Плюс много других мелких вещей, хотя здесь все может быть довольно субъективным.