Как создать проект запуска для ASP.Net MVC Project

Я новичок в IoC и внедрении зависимостей и Onion Architecture. Я пытаюсь создать свою архитектуру решения в соответствии с рекомендациями и рекомендациями сообщества Onion Architecture. В моем решении VS у меня есть несколько проектов для ядра домена, а некоторые - для инфраструктуры и один ASP.NET MVC для пользовательского интерфейса. Теперь я хочу добавить контейнер IoC к решению. Я знаю, что лучше всего добавлять проект начальной загрузки или запуска, который содержит ссылки на контейнер IoC (в моем случае Simple Injector) и все проекты в решении. Таким образом, я могу отделить все решение от IoC Container и легко заменить его на другие в будущем. Теперь мои вопросы:

  1. Какой тип проекта я должен создать для моей программы запуска (MVC или библиотека классов...)

  2. Как загрузчик может запустить проект MVC?

  3. Должен ли загрузчик иметь ссылки на пакеты ASP.NET MVC?

    заранее спасибо

1 ответ

Решение

Для большинства проектов это неправильный подход.

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

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

Обратите внимание, что это не мешает вам использовать несколько классов для организации регистрации DI в корне композиции - это просто означает, что вы должны хранить этот код в основном проекте, где его можно легко редактировать.

Наконец, этот вопрос часто задают в той или иной форме на Stackru. Для тех, кто ищет точный ответ о преимуществах правильного использования DI и о недостатках неправильного его использования, я рекомендую прочитать книгу " Внедрение зависимостей в.NET". Как только вы поймете, что такое DI и как его следует использовать, часть архитектуры станет намного более понятной.