Так что я изо всех сил пытаюсь обдумать этот сценарий:
У меня есть приложение 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.