当然了代码是不会骗人的,造成以上问题肯定不是我品行问题而是代码的问题。
经过一番尝试,我发现这个问题跟系统运行在哪个环境有关系。只要我把 launchSettings.json 里的 ASPNETCORE_ENVIRONMENT 从 Development 改成别的什么值,那么一切都运行正常了。正巧在我们组其他同事都维护一个自己的 appestings.username.json 然后运行在这个环境之下,也就是说他们都不运行在 Development 下。这就是为啥只有我会报错的缘故原由了。
事情到了这一步,那么我们很容易猜测: .NET DI 系统在 Development 下是有骚操纵的。在 Development 下它会进行依赖分析,如果依赖关系有错误,那么直接会报错。但是在其他环境下就不会提交分析校验,只有在运行时真正尝试实例化对象的时候才会报错。
当然靠猜测总是不太靠谱,干脆翻翻代码吧。很快就找到了: