Сравнение замка Windsor, единицы и StructureMap

В следовании до оператора Krzysztof, который Виндзор делает намного больше, чем другой МОК, я хотел понять, как эти стек МОК друг против друга и средств преимуществ / дополнительных услуг, которые предоставляет замок Windsor.

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

51
задан Community 23 May 2017 в 02:25
поделиться

2 ответа

См. здесь и здесь для довольно тщательного технического сравнения нескольких контейнеров 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 , Quartz.Net , SolrNet , SolrSharp , Службы факсов Windows .

В этой серии статей рассказывается о многих тонкостях и особенностях Виндзора.

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

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

48
ответ дан 7 November 2019 в 10:19
поделиться

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

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

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

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

19
ответ дан 7 November 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: