Вопрос по DI и IoC контейнеру - PullRequest
2 голосов
/ 06 апреля 2011

Я новичок в DI и IoC.Я работаю над новым проектом и хочу максимально потерять пару своих объектов.Мои занятия разбиты на несколько проектов в решении.Поэтому я скачал NInject и где-то прочитал, что я должен создавать привязки при запуске приложения (функция Main или Global.asax).Одна вещь, которую я не понимаю, это то, что в этом случае мне придется ссылаться на эти сборки, содержащие классы, чтобы создать привязку, и это означает, что классы связаны с объектом, в котором я создаю привязки.Это правильно?Значит ли это, что лучше использовать MEF?Кто-нибудь может объяснить, как обстоят дела с IoC и почему стоит использовать его?Спасибо

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Inversion of Control - это не отсутствие ссылок на сборки, а создание договоров между вашей логикой и зависимыми сервисами.Это облегчает тестируемость и возможность повторного использования, абстрагируя конкретную реализацию ваших сервисов при их использовании.

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

Есть куча хороших ресурсовдоступны, чтобы узнать больше о шаблоне IOC / DI.Вот пара:

Ninject Sample

Статья Wiki

И какой-то сайт, называемый "переполнением стека"

0 голосов
/ 06 апреля 2011

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

Если это не так, некоторые контейнеры IoC могут иметь несколькопривязок / конфигураций.В StructureMap привязка называется Registry, и вы можете указать, включать ли несколько реестров или даже сканировать библиотеки в указанном каталоге для динамического включения всех реестров.Я помню, что NInject предлагает возможность конфигурировать ядро ​​также из более чем одного места.

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

...