所以我正在努力解决这种情况:
我有一个ASP.NET应用程序,其中几个服务控制器已注册为依赖项-f.ex。
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,并具有以下接口:
public interface IModuleManager
{
IModule GetModuleByConfig(int configId);
IModule GetModuleByName(string name);
}
public interface IModule
{
Task<int> PlaceOrder(Order order);
}
IModule依赖于DbContext,并将其注入到构造函数中。 我实际上将如何在IModule中注入DbContext?
如果我将所有IModule添加到ASP.NET DI,则需要在ModuleManager的构造函数中容纳20-25个模块。