.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
相关产品推荐
相关产品推荐

