Сравнение IoC

Какой IoC следует учитывать при разработке проекта веб-приложения ASP.NET и в чем преимущества различных IoC?

  • ObjectBuilder
  • Unity
  • Spring.NET

Ответ 1

Это не в вашем списке, но подумайте о Castle Windsor

Количество таких объектов, как поддерживающие заводы, чтобы продукт factory вводился не сам factory, либо средство Wcf для ввода прокси-сервера или создания узла с зависимостями.

Имеет приятный свободный интерфейс для подключения отдельных элементов, но предпочтительно использовать соглашение для автоматической проводки, чтобы вам не приходилось перечислять каждый компонент.

Некоторые другие приятные функции:

  • Требуется отдельная dll с новой версии.
  • Поддержка ввода списков и массивов с помощью преобразователей SubDependancy

Здесь - опрос, проведенный в этом году с указанием предпочтительного IoC. Единство кажется верным, но это, вероятно, потому, что это продукт Microsoft, и семинары Microsoft по умолчанию подберут его.

Ответ 2

Мы используем StructureMap в проекте ASP.NET MVC и нашли его невероятно полезным. Единственным реальным недостатком является ограниченная документация. Автоматическая проводка работает очень хорошо и требует очень небольшой конфигурации, если вы используете сильные соглашения для обозначения своих классов и интерфейсов, например:

 public interface ISomething { ... }

 public class Something: ISomething { ... }

До этого мы использовали Spring.NET, хотя мы отбросили это, потому что он выполняет множество других (не-IoC) вещей, которые нам действительно не нужны, и требует сложной конфигурации XML, чтобы делать то, что нам нужно. В качестве контейнера IoC он работал нормально и был очень гибким.

Ключевым моментом, который я бы рекомендовал, что бы вы выбрали, является кодирование, позволяющее использовать IoC - мы используем интерфейсы повсюду. Это действительно помогает модульное тестирование и все преимущества, которые приносят тоже.

Материал Unity в MVC3 также выглядит интересным, но у него еще не было возможности играть с ним.

Ответ 3

Я сомневаюсь, что многие люди использовали более двух или трех из них, и в моем довольно ограниченном опыте с Unity и Ninject в конечном результате не так много. У них несколько разные варианты настройки сопоставлений, и я уверен, что некоторые из более продвинутых функций отличаются, но они, вероятно, редко используются. В конце концов, основные требования к контейнеру IoC не так уж сложны - вы могли бы легко свернуть свои собственные.

Гораздо важнее то, что вы используете шаблон IoC, который выбранный вами бренд, вероятно, не оказывает существенного влияния на качество получаемого приложения.

Для чего это стоит, я бы порекомендовал Ninject, если только потому, что он очень легкий.