2008-10-30 3 views
6

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

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

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

+0

Просто Google «Alt.net» - вы найдете много людей, использующих IOC в .net. Microsoft даже имеет свои собственные структуры МОК, такие как Unity. – 2008-10-30 15:09:52

ответ

6

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

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

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

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

4

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

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

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

2

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

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

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

1

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

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

1

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

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

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

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

0

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

0

Попробуйте LinFu.IOC 2,0:

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

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