Может ли встроенный Dependency Injection в ASP.NET Core сканировать модули на наличие зависимостей?

У меня есть основной проект ASP.NET Core Web Api, который использует несколько проектов, но я следую чистой архитектуре, все интерфейсы помещены в основной проект, есть проекты модулей (инфраструктура), определяющие реализацию. Основной проект просто ссылается на основной проект, не зная об инфраструктуре.

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

Более конкретно, предположим, что у меня есть интерфейс IA (в базовом проекте) и реализация A (в инфраструктуре), традиционно, если основной проект ссылается на оба, мы можем просто вручную зарегистрировать зависимость следующим образом:

public void ConfigureServices(IServiceCollection services){
   services.AddTransient<IA, A>();
}

Однако с чистой архитектурой у нас просто есть IA доступный во время разработки, как мы можем отсканировать и связать реализацию A в этом случае?

Если это невозможно с интегрированным внедрением зависимостей в ASP.NET Core, не могли бы вы показать мне какое-нибудь альтернативное решение (например, Autofac ). Тем не менее, самая сложная часть здесь - это не регистрация вручную, а автоматическое подключение (сканирование). Благодарю.

Всего 2 ответа


Создайте еще один проект под названием зависимости, добавьте ссылку на интерфейсы и инфраструктуру и сделайте его составным корнем. На втором шаге дайте ссылку на внедрение зависимостей в coreweb api и используйте вашу инъекцию зависимостей в configureservices в startup.cs


Оболочка вашего приложения (приложение ASP.NET Core, основной проект) зависит от уровня ядра и инфраструктуры. Это также корень вашей композиции, где вы создаете свои службы регистрации.

Инфраструктура - зависит от ядра

Shell (основная программа) - зависит как от ядра, так и от инфраструктуры

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