AppBuildOptions 配置指南
AppBuildOptions/DefaultMvcApplicationOptions 是宿主应用最重要的配置对象。本文按属性分类说明常见场景。
基础属性
| 属性 | 说明 |
|---|---|
BoostrapLogPath |
自定义启动日志输出目录,默认写入 app_data/bootlog。 |
AspNetWebApplicationOptions |
透传给 WebApplication.CreateBuilder 的选项,如 ApplicationName、Args。 |
BootstrapLoggerConfiguration |
追加 Serilog 配置,用于启动阶段(Host/DI 建立之前)。 |
BootstrapLoggingLevelControl |
LoggingLevelSwitch,可在运行时动态调整启动日志级别。 |
ActivityConfiguration |
Activity Id、Listener 配置。 |
构建阶段 Hook
| Hook | 触发时机 | 典型用途 |
|---|---|---|
ConfigureWebApplicationBuilder / ConfigureWebApplicationBuilderAsync |
WebApplicationBuilder 创建后 |
注册自定义配置源、Serilog、Kestrel 端口等。 |
ConfigureHostBuilder |
HostBuilder 阶段 |
替换容器(Autofac)、配置 Host 默认服务。 |
ConfigureWebHostBuilder |
webApplicationBuilder.WebHost |
配置 UseUrls、UseKestrel、ConfigureAppConfiguration。 |
ConfigureServices |
Host ConfigureServices 阶段 |
注册业务服务、IHostedService、第三方库。 |
ConfigureMvcOptions / ConfigureMvcBuilder |
MVC 构建过程中 | 调整 MvcOptions、添加过滤器/格式化器、开启 RazorRuntimeCompilation。 |
ConfigureLoggingBuilder |
ASP.NET Core Logging Builder | 扩展日志 Provider。 |
ConfigureStartupInitServiceFunc / ConfigureStartupInitServiceAsync |
ConfigureWebApplication 中 |
启动后执行一次的初始化逻辑。 |
自动发现与过滤
AutoDiscoverServiceRegisterTypeFilter:筛选实现IServiceRegister、IAdvancedServiceRegister、ISingleton/IScoped/ITransient的类型。PipelineRegisterTypeFilter:控制IRequestPiplineRegister的加载范围。EndpointRegisterTypeFilter:控制IEndpointConfig的加载范围。
过滤器通常用于多租户或插件场景,确保只有指定程序集参与自动注册。
线程池与容器
UseThreadPoolOptimization:启用后,会调用ThreadPool.SetMinThreads(WorkThreadCount, CompletionPortThreadCount)。UseAutofacContainer:默认true,意味着框架会使用AppServcieProviderFactory替换默认容器。UseSerilogProvider:默认为true,可关闭以使用其他日志框架。
MVC Builder 创建
默认 DefaultMvcApplicationOptions 中:
MvcBuilderCreateFunc ??= (serviceCollection, action) => serviceCollection.AddControllers(action);
你可以在应用选项中覆盖该委托,例如:
public class IdsAppOptions : DefaultMvcApplicationOptions
{
public IdsAppOptions()
{
MvcBuilderCreateFunc = (services, mvcOptions) => services.AddControllersWithViews(mvcOptions);
}
}
启动服务与缓存
services.RegisterCache(appContext.Configuration);:默认注册 Redis/MemoryCache。services.AddMemoryCache:设置ExpirationScanFrequency与SizeLimit。
常见模式
- 多环境日志:通过
configure参数或LOG_MINI_LEVEL环境变量调整输出。 - 按需启用 Hangfire:配合
JobControl.IsDisableJobs,在测试环境关闭后台任务。 - 自定义请求管道:使用
RequestPiplineCollection.Register在BeforeRouting/BeforeEndpointConfig阶段插入中间件。
相关阅读: