构造函数依赖注入问题:_infoSAP为空导致调用CreateCustomerSAP失败
问题原因与解决方案
问题根源
你的_infoSAP为null的核心原因是:控制器存在多个构造函数,依赖注入(DI)容器在解析AccountController时,选择了没有注入IModuleSAP的构造函数(无参构造或第三个带IUserData等参数的构造函数),导致_infoSAP从未被赋值。
另外,APITest方法里还存在笔误:创建的对象是newCustomerSAP,但调用方法时用了未定义的customerDataSAP,这也会引发错误。
解决步骤
1. 注册依赖映射
首先确保DI容器中已注册IModuleSAP与实现类ModuleSAP的映射。根据你的.NET版本,在对应配置文件中添加:
- .NET Framework/.NET Core 2.x:在
Startup.cs的ConfigureServices方法中
services.AddScoped<IModuleSAP, ModuleSAP>();
- .NET 6+:在
Program.cs中
builder.Services.AddScoped<IModuleSAP, ModuleSAP>();
2. 合并控制器构造函数
删除多余的构造函数,将所有需要的依赖合并到一个构造函数中,确保DI容器能一次性注入所有依赖:
namespace OurBrand.Controllers { public class AccountController : RootController { private readonly IModuleSAP _infoSAP; private readonly IUserData _userData; private readonly IMapper _mapper; private readonly ICheckCompanyNumber _checkCompanyNumber; // 仅保留这个包含所有依赖的构造函数 public AccountController(IModuleSAP customerSAP, IUserData userData, IMapper mapper, ICheckCompanyNumber checkCompanyNumber) { _infoSAP = customerSAP; _userData = userData; _mapper = mapper; _checkCompanyNumber = checkCompanyNumber; } public JsonResult APITest(string testValue) { var newCustomerSAP = new CustomerSAP_DTO() { // 填充属性 }; // 修正变量名,使用newCustomerSAP _infoSAP.CreateCustomerSAP(newCustomerSAP); return Json(new { success = true, }, JsonRequestBehavior.AllowGet); } } }
3. 验证依赖可用性
确保IUserData、IMapper、ICheckCompanyNumber这些依赖也已在DI容器中注册,否则合并后的构造函数依然无法被正确解析。
内容的提问来源于stack exchange,提问作者rd1218
相关产品推荐
相关产品推荐

