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

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

内容提要

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

🎯

关键要点

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

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

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

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

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

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

🔎

延伸解读

开发环境与其他环境的依赖校验差异

在.NET的依赖注入系统中,开发环境会在启动时进行依赖关系的校验,而其他环境则在运行时才进行。这意味着在开发环境下,未注册的服务会立即报错,而在生产环境中则可能在运行时才发现问题。这种差异可能导致开发者在调试时忽视潜在的依赖问题。

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

如果在开发环境中遇到依赖校验错误,可以通过修改launchSettings.json中的ASPNETCORE_ENVIRONMENT设置,切换到其他环境来避免错误。此外,开发者也可以选择强制开启依赖关系的校验,以确保在任何环境下都能及时发现问题。

调试时的最佳实践

建议开发者在调试时尽量选择在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环境下会提前校验依赖关系,而在其他环境下则在运行时才会进行校验。

🏷️

标签

➡️

继续阅读