在.NET Aspire的DistributedApplication中如何配置ServiceProviderOptions?
.NET Aspire 中启用单例与作用域服务校验的方法
完全可行,你可以通过两种方式实现类似的校验机制:
1. 单个服务项目内单独配置
在Aspire解决方案中的各个服务项目(如Web API、Worker服务)的Program.cs里,依然可以沿用之前的方式配置ServiceProviderOptions:
var builder = WebApplication.CreateBuilder(args); // 启用服务注册校验与作用域校验 builder.Host.UseServiceProviderFactory(new DefaultServiceProviderFactory(new ServiceProviderOptions { ValidateOnBuild = true, ValidateScopes = true, })); // 后续服务注册、应用构建逻辑... var app = builder.Build(); // ...
2. 全局统一配置(针对所有分布式服务)
如果希望在Aspire的分布式应用层面给所有托管服务统一启用校验,可以在DistributedApplicationBuilder中配置全局主机默认设置:
var builder = DistributedApplication.CreateBuilder(args); // 全局启用所有服务的服务校验规则 builder.ConfigureHostDefaults(hostBuilder => { hostBuilder.UseServiceProviderFactory(new DefaultServiceProviderFactory(new ServiceProviderOptions { ValidateOnBuild = true, ValidateScopes = true, })); }); // 添加分布式服务... var apiService = builder.AddProject<Projects.MyApiService>("api"); var webApp = builder.AddProject<Projects.MyWebApp>("web"); builder.Build().Run();
校验规则说明
ValidateOnBuild:在服务容器构建阶段就检查服务注册的有效性,比如检测缺失的依赖项、无效的服务注册。ValidateScopes:运行时校验作用域服务是否被单例服务直接/间接引用,避免出现作用域服务生命周期泄漏的问题。
内容的提问来源于stack exchange,提问作者Justin D. Harris
相关产品推荐
相关产品推荐

