在我们的项目中,我们通过构造函数在所有控制器中都具有DI(asp.net核心内置依赖项注入)。一个控制器动作调用通过构造函数解析的类的函数,在正常加载期间没有任何问题。该网站经过压力测试,大约有1000个请求(斜率为1秒),大约5-10%的请求失败,并抛出异常作为空引用。
Is it necessary to check null values with constructor injection? 该链接建议构造函数中的对象永远不会为null,即框架将在到达控制器作用域之前引发异常。
startup.cs中的依赖注入
services.AddSingleton<IRandomInterface , ImplementedClass>();
控制器中的构造函数:
public RandomController(IRandomInterface wgcr,ILogger<RandomController> log)
{
this.object = wgcr;
this._log = log;
}
控制器中的成员对象:
private IRandomInterface object { get; set; }
控制器动作:
[HttpPost("aa")]
public async Task RandomFunction()
{
try
{
if(object ==null)
{
_log.LogInformation("RandomFunction object : null");
}
else
await object.RandomFunction();
}
catch (Exception ex)
{
_log.LogError("error in RandomFunction " + ex.Message "StackTrace " + ex.StackTrace);
}
}
我找不到在控制器内部将对象解析为null的可能原因,如果没有任何人对asp.net核心内置依赖项注入有任何见解,将不胜感激。
谢谢!