Сравнение Castle Windsor, Unity и StructureMap - PullRequest
51 голосов
/ 07 февраля 2010

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

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

Ответы [ 2 ]

48 голосов
/ 07 февраля 2010

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

Однако я не думаю, что на самом деле есть какие-то жизненно важные функции, которые предлагает Виндзор, а другие контейнеры - нет. 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, если вы правильно структурируете свой код (например, избегаете анти-паттерна сервисного локатора).

17 голосов
/ 08 февраля 2010

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

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

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

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

...