ModuleHandler обслуживает модули на сервисном уровне.Правильный способ ввести зависимости - PullRequest
0 голосов
/ 02 апреля 2019

Так что я изо всех сил пытаюсь обдумать этот сценарий:

У меня есть приложение ASP.NET с несколькими служебными контроллерами, зарегистрированными в качестве зависимостей - например,

services.AddScoped<IOrderService, OrderService>();

OrderService - это кросс-API-контроллер, который размещает заказы.
Он имеет очень простую реализацию:

public class OrderService : IOrderService
{
    private readonly IEmailService _emailService;

    public OrderService(IEmailService emailService)
    {
        _emailService = emailService;
    }

    public async Task PlaceOrder(int configId, Order order, ApplicationUser user)
    {
        var module = new ModuleManager().GetModuleByConfig(configId);
        await module.PlaceOrder(order);
        await _emailService.SendOrderConfirmation(order, user.Email);
    }
}

ModuleManager отвечает за передачу правильного IModule на уровень Service и имеет следующие интерфейсы:

    public interface IModuleManager
    {
        IModule GetModuleByConfig(int configId);
        IModule GetModuleByName(string name);
    }

    public interface IModule
    {
        Task<int> PlaceOrder(Order order);
    }

IModule зависит от DbContext и вставляет его в конструктор.Как бы я на самом деле пошел о внедрении DbContext в IModule?

Если я добавлю все IModule в ASP.NET DI, мне нужно будет разместить 20-25 модулей в конструкторе ModuleManager.

...