Может ли встроенный Dependency Injection в ASP.NET Core сканировать модули на наличие зависимостей? - PullRequest
0 голосов
/ 18 мая 2019

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 мая 2019

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

0 голосов
/ 18 мая 2019

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

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

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

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

...