关于依赖注入请尽量在 Development 环境进行调试
内容提要
.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环境下会提前校验依赖关系,而在其他环境下则在运行时才会进行校验。