agilelabs-fx-docs main fundamentals/agilelabs-application/app-build-options.md

AppBuildOptions 配置指南

AppBuildOptions/DefaultMvcApplicationOptions 是宿主应用最重要的配置对象。本文按属性分类说明常见场景。

基础属性

属性 说明
BoostrapLogPath 自定义启动日志输出目录,默认写入 app_data/bootlog
AspNetWebApplicationOptions 透传给 WebApplication.CreateBuilder 的选项,如 ApplicationNameArgs
BootstrapLoggerConfiguration 追加 Serilog 配置,用于启动阶段(Host/DI 建立之前)。
BootstrapLoggingLevelControl LoggingLevelSwitch,可在运行时动态调整启动日志级别。
ActivityConfiguration Activity Id、Listener 配置。

构建阶段 Hook

Hook 触发时机 典型用途
ConfigureWebApplicationBuilder / ConfigureWebApplicationBuilderAsync WebApplicationBuilder 创建后 注册自定义配置源、Serilog、Kestrel 端口等。
ConfigureHostBuilder HostBuilder 阶段 替换容器(Autofac)、配置 Host 默认服务。
ConfigureWebHostBuilder webApplicationBuilder.WebHost 配置 UseUrlsUseKestrelConfigureAppConfiguration
ConfigureServices Host ConfigureServices 阶段 注册业务服务、IHostedService、第三方库。
ConfigureMvcOptions / ConfigureMvcBuilder MVC 构建过程中 调整 MvcOptions、添加过滤器/格式化器、开启 RazorRuntimeCompilation。
ConfigureLoggingBuilder ASP.NET Core Logging Builder 扩展日志 Provider。
ConfigureStartupInitServiceFunc / ConfigureStartupInitServiceAsync ConfigureWebApplication 启动后执行一次的初始化逻辑。

自动发现与过滤

  • AutoDiscoverServiceRegisterTypeFilter:筛选实现 IServiceRegisterIAdvancedServiceRegisterISingleton/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:设置 ExpirationScanFrequencySizeLimit

常见模式

  1. 多环境日志:通过 configure 参数或 LOG_MINI_LEVEL 环境变量调整输出。
  2. 按需启用 Hangfire:配合 JobControl.IsDisableJobs,在测试环境关闭后台任务。
  3. 自定义请求管道:使用 RequestPiplineCollection.RegisterBeforeRouting / BeforeEndpointConfig 阶段插入中间件。

相关阅读