关于依赖注入请尽量在 Development 环境进行调试

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

.NET的依赖注入系统在开发环境下会提前校验依赖关系,导致未注册服务时报错,而其他环境则在运行时校验。通过修改环境设置或强制开启校验可避免此问题。

🎯

关键要点

  • 在开发环境下,.NET的依赖注入系统会提前校验依赖关系,导致未注册服务时报错。

  • 其他环境在运行时才会校验依赖关系,因此不会提前报错。

  • 通过修改launchSettings.json中的ASPNETCORE_ENVIRONMENT可以避免开发环境下的依赖校验问题。

  • 在Development环境下,DefaultServiceProviderOptions的ValidateScopes与ValidateOnBuild会被设置为True。

  • 可以通过强制开启依赖关系的校验来在任何环境下都报错。

  • 调试时建议选择在Development环境下进行,或手动强制开启校验。

延伸问答

.NET的依赖注入系统在开发环境下有什么特别之处?

.NET的依赖注入系统在开发环境下会提前校验依赖关系,导致未注册服务时报错,而其他环境则在运行时才会校验。

如何避免在开发环境下的依赖校验问题?

可以通过修改launchSettings.json中的ASPNETCORE_ENVIRONMENT,将其设置为非Development环境来避免依赖校验问题。

在Development环境下,DefaultServiceProviderOptions的设置是什么?

在Development环境下,DefaultServiceProviderOptions的ValidateScopes与ValidateOnBuild会被设置为True。

如何强制开启依赖关系的校验?

可以在Host上调用UseDefaultServiceProvider扩展方法,指定ValidateOnBuild与ValidateScopes都为True,以强制开启依赖关系的校验。

为什么只有我在开发环境下会报错,而其他同事不会?

因为其他同事的环境设置不是Development,他们的appsettings.username.json配置可能避免了提前校验依赖关系的问题。

在不同环境下,依赖关系的校验行为有什么区别?

在Development环境下会提前校验依赖关系,而在其他环境下则在运行时才会进行校验。

➡️

继续阅读