Обновление 09.08.2018
Unity разрабатывается здесь, но у меня не было времени, чтобы проверить, как он работает с платформой ASP.NET Core.
Обновление 15.03.2018
Это решение предназначено для конкретной проблемы использования ASP.NET Core v1 с Unity при использовании .NET Framework 4.5.2, а не.NET Core Framework. Мне пришлось использовать эту настройку, так как мне нужно было несколько DLL-библиотек .Net 4.5.2, но для всех, кто начинал заново, я бы не рекомендовал такой подход. Также Unity больше не разрабатывается (насколько мне известно), поэтому я бы рекомендовал использовать Autofac Framework для новых проектов. Смотрите этот пост для получения дополнительной информации о том, как это сделать.
вступление
Я строю веб-приложение с использованием ASP.NET с MVC. Это приложение зависит от определенных служб (служба WCF, служба хранилища данных и т.д.). Теперь, чтобы все было хорошо и развязано, я хочу использовать DI (Dependecy Injection Framework), в частности Unity.
Начальное исследование
Я нашел этот пост, но, к сожалению, он не работает. Хотя идея хороша.
В основном это говорит о том, что вы не должны регистрировать все сервисы, зарегистрированные в ServiceCollection, в свой собственный контейнер, а должны ссылаться на ServiceProvider по умолчанию.
Так. если что-то должно быть разрешено, вызывается ServiceProvider по умолчанию, и если у него нет разрешения, тип будет разрешен с использованием вашего пользовательского UnityContainer.
Проблемы
MVC всегда пытается разрешить контроллер с помощью ServiceProvider по умолчанию.
Кроме того, я заметил, что даже если контроллер будет разрешен правильно, я никогда не смогу "смешать" зависимости. Теперь, если я хочу использовать один из моих сервисов, а также интерфейс IOptions из ASP, класс никогда не может быть разрешен, потому что ни один из этих двух контейнеров не имеет разрешения для обоих типов.
Что мне нужно
Итак, подведем итог: мне нужны следующие вещи:
- Настройка, в которой мне не нужно копировать зависимости ASP.NET в мой UnityContainer.
- Контейнер, который может разрешить мои контроллеры MVC
- Контейнер, который может разрешать "смешанные" зависимости
РЕДАКТИРОВАТЬ:
Итак, вопрос в том, как я могу достичь этих очков?