You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7分层架构调用Domain服务时依赖注入失败问题求助

解决.NET 7分层架构中依赖注入失败问题

问题根源

当前出现注入错误的核心原因有两个:

  • Domain层的IFazerPedidoDomainService及其实现类未注册到DI容器(对应代码被注释)
  • FazerPedidoService没有通过构造函数注入IFazerPedidoDomainService实例,导致私有字段_fazerPedidoDomainService始终为null,调用时触发空引用异常

解决方案步骤

1. 注册Domain层服务到DI容器

修改Program.cs,取消注释Domain服务的注册代码,并补充必要的命名空间引用:

using Ecommerce.Application.Services;
using Ecommerce.Application.Services.Interfaces;
// 新增Domain层接口与实现类的命名空间引用
using Ecommerce.Domain.Interfaces;
using Ecommerce.Domain.Services;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();  
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// 注册Application层服务
builder.Services.AddScoped<IFazerPedidoService, FazerPedidoService>();
// 取消注释,注册Domain层服务(确保FazerPedidoDomainService是IFazerPedidoDomainService的实现类)
builder.Services.AddScoped<IFazerPedidoDomainService, FazerPedidoDomainService>();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

2. 修改FazerPedidoService,通过构造函数注入依赖

替换无参构造函数,添加依赖注入逻辑,同时增加空值检查避免潜在问题:

public class FazerPedidoService : IFazerPedidoService
{
    private readonly IFazerPedidoDomainService _fazerPedidoDomainService;

    // 替换无参构造函数,注入Domain层服务
    public FazerPedidoService(IFazerPedidoDomainService fazerPedidoDomainService)
    {
        // 空值检查,提前捕获依赖未注入的问题
        _fazerPedidoDomainService = fazerPedidoDomainService ?? throw new ArgumentNullException(nameof(fazerPedidoDomainService));
    }

    public FazerPedidoModel FazerPedido(FazerPedidoModel fazerPedidoModel)
    {
        var pedido = new FazerPedidoEntity
        {
            Id = 999
        };

        pedido = _fazerPedidoDomainService.FazerPedidoDomain(pedido);
        return fazerPedidoModel;
    }
}

额外注意事项

  • 确保FazerPedidoDomainService类正确实现了IFazerPedidoDomainService接口,且类的访问修饰符为public(否则DI容器无法实例化)
  • 构造函数中的空值检查可以在启动阶段就暴露依赖问题,避免运行时出现难以排查的空引用异常

内容的提问来源于stack exchange,提问作者SunOct

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:28:35