Подтвердить что ты не робот

Что я должен учитывать при выборе структуры внедрения зависимостей для .NET.

см. также Какая зависимость С#/.NET Инъекционные рамки заслуживают внимания в?

Теперь существует много зависимость injection рамки на выбор. Раньше вы часто были вынуждены использовать определенную структуру инъекций зависимостей из-за библиотеки, которую вы использовали. Однако библиотека локатора общих служб позволила библиотечному коду быть независимым от фреймворков инъекций.

Время, необходимое для того, чтобы выучить все из них достаточно хорошо, чтобы решить, что использовать, необоснованно. Я не верю, что мы еще не достигли стадии, что мы можем говорить о лучшей структуре инъекций зависимостей. Итак, какие вопросы я должен спрашивать о проекте и о себе, чтобы помочь выбрать наилучшую структуру инъекций зависимостей для использования в данном случае?

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

Есть ли еще полезный словарь для использования при сравнении стилей инфраструктур инъекций зависимостей?

Работает ли библиотека Locator службы в реальной жизни или вы вынуждены использовать множество разных программ для инъекций зависимостей в одном проекте?

Насколько легко преувеличивать ваш код с каждой концепцией Injection Framework, например, такие инструменты, как ReSharper, хорошо работают с заданной структурой?

4b9b3361

Ответ 1

FYI, только сегодня утром я нашел интересное сравнение между всеми контейнерами .NET IoC:

http://elegantcode.com/2009/01/07/ioc-libraries-compared/

Несколько вопросов:

  • Насколько вам нужна основная поддержка? Spring, вероятно, самый большой из них. Все использовали его или уже слышали об этом, так много информации. Он также, вероятно, имеет наибольшее количество функций, но это означает, что вам просто нужно учиться. Небольшой контейнер, такой как Autofac, может быть приятным, но вы можете столкнуться с проблемой, о которой вы не найдете.
  • Удобна ли конфигурация w/Xml? Каждый контейнер IoC зависит от конфигурации и настройки. Spring и Unity - тяжелые Xml.
  • Является ли это постоянным выбором? Если вы находитесь в одном из тех мест, где вы получаете только один шанс на выбор, это не имеет значения. Но, если вы когда-либо захотите выбрать другое решение в будущем, вы, вероятно, не хотите, чтобы IoC, который требует от вас атрибутов ваших классов (sorta the reverse of the above question), потому что вы будете ненавидеть себя, когда вам нужно разорвать все это все. Для сравнения, wwapping из xml config может быть не таким болезненным.
  • Что такое ваш магазин? У меня были проблемы с качкой нескольких вариантов с открытым исходным кодом только из-за "вздоха! это не Microsoft!". реакции. Если вы являетесь прямым магазином MS, использование Unity будет намного более легкой культурной победой.

В личном примечании:

Я использовал StructureMap по тем же причинам, о которых упоминалось в блоге, который я связал. Я думаю, что Xml config - это огромная боль для поддержки и, особенно, отладка (см. WCF). Я еще не пробовал Ninject, но, основываясь на их маркетинге, он должен быть супер радом!

Ответ 2

Трудно ответить, какая структура является "лучшей", но я могу сказать вам, какая структура является самой простой: простой инжектор:

Простой инжектор - это простая в использовании инверсия библиотеки управления для .NET и Silverlight. Он поддерживает только конфигурацию на основе кода и является идеальной отправной точкой для разработчиков, незнакомых с более крупными IoC/ Библиотеки DI

http://simpleinjector.codeplex.com/

Бесстыдный штекер btw; -)

Ответ 3

Я думаю, что выбор сводится к поиску структуры, которая соответствует вашим требованиям, а затем личным предпочтениям.

Используется ли в вашем проекте библиотека, такая как инструменты rhino, которые уже интегрируются с каркасом DI? Если это так, это может быть хорошей отправной точкой, если вы хотите избежать использования "большого количества различных фреймворков инъекций зависимостей".

Проверьте эти два сообщения:

Ответ 4

Spring, а Unity - тяжелые Xml.

Я бы не согласился с этим утверждением для Unity; вы можете написать

container.RegisterType<IRobot, MrRoboto>();

и сделайте свою настройку в коде, используя интерфейс в свободном стиле. Лично мне нравится Unity.