Сравнение Виндзорский замок, единства и StructureMap
в дополнение к заявлению Кшиштофа, что Виндзор делает намного больше, чем другие МОК, я хотел понять, как эти МОК складываются друг против друга и преимущества/дополнительные услуги, которые предоставляет замок Виндзор.
есть ли какие-либо сравнения? Может кто-нибудь помочь мне понять дополнительные функции, которые замок Виндзор предоставляет по сравнению с другими МОК
2 ответа:
посмотреть здесь и здесь для довольно тщательного технического сравнения нескольких контейнеров МОК, хотя и несколько устаревших к настоящему времени (они до Windsor 2.0)
однако, я не думаю, что на самом деле есть vital особенности, которые Виндзор предлагает и другие контейнеры не делают.Виндзор,StructureMap, Spring.NET все вокруг на несколько лет и были использованы в сериях проекты за эти годы так что они очень зрелые сейчас. Новые контейнеры, например Autofac,единство,Ninject и SimpleInjector построить на этом предыдущем опыте, чтобы они не хватает этих жизненно важных функций.
теперь более субъективная часть ответа: Мне нравится думать, что Windsor имеет хорошее сочетание модулей юзабилити, расширяемости и интеграции.
удобство использования: например, вы можете используйте регистрацию XML и / или кода (он также имеет fluent API как и большинство контейнеров в наше время).
расширения:много точек расширения который можно использовать для настройки или переопределения практически любого поведения по умолчанию.
интеграция: Виндзор большой зал (модули), которые позволяют легко интегрироваться с другими фреймворками/библиотеками. Другие интеграции включают ASP.NET MVC,монорельс, Workflow Foundation,NServiceBus,для MassTransit,Рейсовый Автобус, Quartz.Net,SolrNet,SolrSharp,Службы Факсов Windows.
эта серия статей охватывает множество тонкостей и точек расширения Виндзора.
обратите внимание, что я не говоря, что другие контейнеры не делают предлагать подобные вещи! Даже если вы выбрали один из них, а позже выяснили, что ему не хватает какой-то интеграции, обычно нетрудно закодировать его самостоятельно.
нижняя строка: я не думаю, что вы можете ошибиться с любым из основных контейнеров IoC, если вы правильно структурируете свой код (например, избегайте анти-шаблона service locator).
для меня есть две убийственные особенности Виндзора, которые я не верю, что большинство других контейнеров обеспечивают.
возможность работы в контейнере агностическим способом-это означает, что ваш контейнер может загрузиться весь код для вас, и вы можете в полной мере воспользоваться его богатыми возможностями, никогда не ссылаясь на любой из замка.*.сборки dll в сборках без инфраструктуры. Это происходит благодаря таким функциям, как ленивые загрузчики компонентов, динамические параметры и типизированная Фабрика Объект, который не ограничивает вас от использования преимуществ расширенных возможностей контейнера, избегая при этом вручную кодировать уровень интеграции или использовать Service Locator, который, как написал @ploeh, является анти-шаблоном.
очень богатая экосистема расширяемости/расширений, которая может дать вам действительно мощные возможности и значительно уменьшить количество кода сантехники, который вы должны написать. Это может показаться не мощным, но вы будет оцените его, как только вы берете преимущество таких вещей, как WCF Facility в одном проекте, а затем в другом вы не сможете его использовать. Расширяемая часть означает, что, хотя Windsor не пытается (это его цель Дизайна) решить каждую проблему, которую вы можете иметь из коробки, она очень расширяема, что означает, что вы можете настроить и крутить ее, чтобы сделать почти все, что вам может понадобиться.
кроме этого мне просто нравится, как Виндзор работает почти так, как ожидалось (в отличие от некоторых других контейнеры) и как это решает мелочи. Например, создание украшенных услуг очень просто. Мне также очень нравится, что это fluent registration API, который очень хорошо работает как для простых сценариев, так и не слишком запутывается и усложняется, когда вы хотите сделать что-то продвинутое. Плюс много других мелочей, хотя здесь все может быть очень субъективно.