Skip to content
推广您的产品

应用启动与扩展

命名空间:ZhonTai.Admin.Core

中台 Admin 的启动入口是 HostApp 类,通过 HostAppOptions 提供 15+ 个扩展回调点,允许在各阶段注入自定义逻辑。

应用场景

  • 自定义中间件注册
  • 自定义数据库配置
  • 自定义服务注册
  • 自定义 FreeSql 配置

HostApp 启动流程

HostApp.Run(args, assembly)

  ├── ConfigurePreWebApplicationBuilder  // 1. 前置 WebApplicationBuilder 配置
  ├── ConfigureWebApplicationBuilder   // 2. WebApplicationBuilder 配置
  ├── ConfigurePreServices             // 3. 前置服务注册
  ├── ConfigureServices               // 4. 服务注册(核心)
  ├── ConfigurePostServices            // 5. 后置服务注册
  ├── ConfigureMvcBuilder              // 6. MVC 构建器配置
  ├── ConfigureAutofacContainer        // 7. Autofac 容器配置
  ├── Build + ConfigurePreMiddleware   // 8. 前置中间件
  ├── ConfigureMiddleware              // 9. 中间件注册
  ├── ConfigurePostMiddleware          // 10. 后置中间件
  └── Run                              // 11. 启动应用

启动项目

csharp
// Program.cs
var app = new HostApp();
app.Run(args, typeof(Program).Assembly);

HostAppOptions 扩展点

通过在启动代码中配置 HostAppOptions 实现自定义扩展。

服务注册阶段

回调说明
ConfigurePreWebApplicationBuilder在创建 WebApplicationBuilder 之前配置
ConfigureWebApplicationBuilder配置 WebApplicationBuilder
ConfigurePreServices前置服务注册
ConfigureServices核心服务注册阶段
ConfigurePostServices后置服务注册
ConfigureMvcBuilder配置 MVC 构建器
ConfigureAutofacContainer配置 Autofac DI 容器

中间件阶段

回调说明
ConfigurePreMiddleware前置中间件注册
ConfigureMiddleware中间件注册
ConfigurePostMiddleware后置中间件注册

基础设施阶段

回调说明
ConfigureFreeSqlBuilder配置 FreeSql 构建器
ConfigurePreFreeSql前置 FreeSql 配置
ConfigureFreeSqlFreeSql 配置
ConfigureFreeSqlSyncStructureFreeSql 同步结构配置
ConfigureDynamicApi动态 API 配置
ConfigureSwaggerUISwagger UI 配置
ConfigureIdGenerator雪花 Id 生成器配置
CustomInitDb自定义数据库初始化(跳过默认)

使用示例

csharp
var hostAppOptions = new HostAppOptions
{
    // 自定义服务注册
    ConfigurePreServices = context =>
    {
        context.Services.AddSingleton<IMyService, MyService>();
    },

    // 自定义中间件
    ConfigurePreMiddleware = context =>
    {
        context.App.UseMyCustomMiddleware();
    },

    // 自定义 FreeSql 配置
    ConfigureFreeSql = (fsql, dbConfig) =>
    {
        fsql.Aop.CommandBefore += (s, e) =>
        {
            Console.WriteLine(e.Command.CommandText);
        };
    },

    // 自定义数据库初始化
    CustomInitDb = true,
};

var app = new HostApp();
app.Run(args, typeof(Program).Assembly, hostAppOptions);

AppInfo 全局访问

AppInfo 提供全局静态访问,在任意位置获取服务。

csharp
// 获取服务
var cache = AppInfo.GetService<ICacheTool>();
var config = AppInfo.GetRequiredService<AppConfig>();

// 获取配置项
var appConfig = AppInfo.GetOptions<AppConfig>();
var dbConfig = AppInfo.GetOptions<DbConfig>();

// 获取当前用户信息
var userId = AppInfo.User?.Id;

// 获取 HttpContext
var httpContext = AppInfo.HttpContext;

// 获取日志
AppInfo.Log?.LogInformation("应用启动");

WARNING

AppInfo 依赖应用启动后初始化完成,在 Program.cs 的早期阶段可能为 null。

ModuleInfo 模块信息

用于标识模块程序集和本地化类型。

csharp
new ModuleInfo
{
    Assembly = typeof(MyModuleService).Assembly,
    LocalizerType = typeof(MyModuleLocalizer)
}