ModuleHandler向服务层提供模块。注入依赖关系的正确方法

时间:2019-04-02 16:19:05

标签: asp.net-core dependency-injection .net-core service-layer

所以我正在努力解决这种情况:

我有一个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个模块。

0 个答案:

没有答案