Инверсия управления с помощью .net - PullRequest
6 голосов
/ 30 октября 2008

Редко слышу, как кто-то использует Inversion of Control (Ioc) принцип .Net У меня есть друзья, работающие с Java, которые используют гораздо больше Ioc в Spring и PicoContainer.

Я понимаю принцип удаления зависимостей из вашего кода ... но у меня есть сомнения, что он намного лучше.

Почему программисты .Net не используют (или используют меньше) эти типы фреймворков? Если вы это сделаете, вы действительно найдете положительный эффект в долгосрочной перспективе?

Ответы [ 7 ]

6 голосов
/ 30 октября 2008

Многие люди используют IOC в .NET, и существует несколько платформ, которые могут помочь с использованием IoC. Вы можете увидеть это меньше в WinForms, потому что сложнее просто позволить контейнеру соединять все вместе, когда вы создаете формы в Visual Studio, но я могу сказать, что для серверных приложений .NET, где я работаю по крайней мере , IoC используется очень успешно.

Зачем использовать его в .NET? По той же причине вы используете его везде. Две самые большие вещи, которые мне нравятся:

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

В некоторых других публикациях обсуждаются различные платформы IoC / DI, доступные для .NET:

4 голосов
/ 30 октября 2008

Я использую StructureMap для внедрения зависимостей и только недавно начал использовать его с iBATIS.NET для внедрения наших сопоставителей объектов домена во время выполнения (и не через XML-файл конфигурации, нет, спасибо!).

Я видел немедленные выгоды. Создание интерфейсов для всех наших картографов (например, IPersonMapper), а затем добавление Moq позволяет мне быстро и легко написать несколько довольно хороших модульных тестов без базы данных.

Ранее (.NET 1.0) я написал свою собственную систему плагинов, в основном для изучения рефлексии. С тех пор я внедрил своего рода IoC в свои проекты. Только недавно я начал использовать IoC для того, чтобы писать модульные тесты гораздо менее болезненно. Я не мог себе представить, чтобы сделать это как-то иначе.

2 голосов
/ 30 октября 2008

IoC на самом деле не является обычным явлением в .Net до сих пор. И это все, что связано с Microsoft, и рекламные кампании, которые они сделали. до сих пор они больше обращали внимание на возможности RAD в VS и в то же время забывали продвигать такие вещи, как IoC и Di, но теперь у них есть своя собственная структура под названием Unity и работа, которую они проделали над ASP.Net MVC.

Так что, думаю, большинство людей начнут использовать подобные вещи. Потому что знаю, что у них есть альтернатива MS.

И я использую StructureMap.

1 голос
/ 30 октября 2008

Существует множество теорий, связанных с использованием IoC .NET. Я думаю, что есть немало разработчиков, которые не имеют опыта в этой области. Они не пришли из фона Java. Они пришли из классического ASP и фона VB6. Кроме того, Microsoft до недавнего времени не поощряла использование IoC.

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

IoC - это больше, чем просто использование другого элемента в наборе инструментов. Речь идет о том, чтобы знать, как использовать, зная, когда использовать его и зрелости в качестве разработчика.

Что касается .NET, у меня есть несколько IoC-контейнеров. Я использовал Windsor, StructureMap, Unity и, совсем недавно, Ninject. Имейте в виду, однако, я не использовал их все в реальных приложениях. Мне нравится играть и смотреть, что там происходит. Я обнаружил, что рынок контейнеров IoC .NET довольно хороший.

1 голос
/ 30 октября 2008

Это становится все более распространенным. Мой текущий проект использует Spring, а в моем предыдущем проекте мы использовали Castle Windsor.

Теперь я хотел бы использовать идею «соглашения поверх конфигурации», чтобы предотвратить все эти сложные объявления XML.

0 голосов
/ 18 декабря 2008

Попробуйте LinFu.IOC 2.0:

http://www.codeproject.com/KB/cs/LinFu_IOC.aspx

Это один из самых гибких контейнеров IOC, и, как и в Ninject, нет файла XML для обслуживания. Однако, в отличие от Ninject, LinFu не заставляет вас писать какой-либо обязательный код для соединения ваших зависимостей. Взглянуть! :)

0 голосов
/ 30 октября 2008

Я использую его для того, чтобы мои модульные тесты могли заменить ложные классы (имитирующие фактические производственные классы) для зависимых объектов верхнего уровня, чтобы мои модульные тесты действительно выполняли и тестировали код только в одном классе. Метод, который они написаны для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...