应用程序启动配置方式

一、速通一图流

应用程序启动配置方式_第1张图片

二、AppStartup 启动总结

AppStartup 是 Furion 框架中一种更加灵活的应用程序启动配置方式,它取代了传统的 ASP.NET Core Startup 类,使得应用配置更易于管理和扩展。

1. Startup 类(传统方式)

  • .NET 5 的启动方式
    • 通过 Program.cs 中的 UseStartup() 方法指定启动类。
    • Startup 类包含两个主要方法:
      • ConfigureServices(IServiceCollection services):用于配置应用所需的服务。
      • Configure(IApplicationBuilder app, IWebHostEnvironment env):用于配置应用的请求处理管道。
  • .NET 6 之后的变化
    • 微软在 .NET 6 中不再推荐使用 UseStartup(),而是直接在 Program.cs 中配置服务和中间件。

2. AppStartup 概述

Furion 提供了更灵活的配置方式:AppStartup,可以在任何项目层定义 Startup 配置,而不是将其绑定在 Web 应用层。
为什么要使用 AppStartup

  1. 解耦 Startup 类:避免在每个 Web 应用层中重复配置 Startup 类。
  2. 减轻 Startup 类的臃肿:随着业务增长,Startup 类可能会变得复杂和难以维护。
  3. 共享配置:Startup 类配置可以在多个项目层之间共享。
    注意:AppStartup 的派生类必须位于被启动层引用的项目中,否则不会被加载。

3. AppStartup 配置方法

方法约定

  • 任何公开、非静态、返回 void 且第一个参数为 IServiceCollection 类型的方法,会被视为 ConfigureServices 方法。
  • 任何公开、非静态、返回 void 且第一个参数为 IApplicationBuilder,第二个参数为 IWebHostEnvironment 的方法,会被视为 Configure 方法。
public class MyStartup : AppStartup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDataValidation();  // 添加数据验证服务
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseSwagger();  // 启用 Swagger 中间件
    }
}

4. AppStartup 配置顺序

  • 默认顺序:根据程序集名称的字母顺序进行正序调用。
  • 自定义顺序:通过 [AppStartup(order)] 特性来定义顺序,order 数值越大,越先调用。

5. AppStartup 方法调用顺序

方法顺序: 在 AppStartup 中,方法的调用顺序与方法书写顺序一致,越靠前的方法越早调用。

6. Startup 配置最佳实践

v3.6.3+: Furion 从 v3.6.3+ 版本开始,支持 FakeStartup 模式,简化 Startup 类的配置。
推荐做法

  • Web 启动层的 Startup.cs 保持为空
public class Startup
{
    public void ConfigureServices(IServiceCollection services) { }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { }
}
  • 将具体的配置迁移到 Web 核心层(如Furion.Web.Core.Startup.cs):
public sealed class FurWebCoreStartup : AppStartup
{
    // 配置应用程序所需的服务
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCorsAccessor();  // 添加 CORS 服务,允许跨域请求
        services.AddControllers().AddInject();  // 添加 MVC 控制器和 Furion 的依赖注入扩展
    }

    // 配置应用程序的请求处理管道
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();  // 开发环境下启用开发者异常页面
        }
        app.UseHttpsRedirection();  // 强制将 HTTP 请求重定向为 HTTPS
        app.UseRouting();  // 启用路由中间件
        app.UseCorsAccessor();  // 启用 CORS 中间件
        app.UseAuthentication();  // 启用身份认证中间件
        app.UseAuthorization();  // 启用授权中间件
        app.UseInject();  // 使用 Furion 的依赖注入中间件
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();  // 映射控制器路由
        });
    }
}

7. 构造函数注入说明

  • AppStartup 派生类无法使用构造函数注入服务
  • 解决方案
    • 获取配置 IConfiguration:通过 App.Configuration 获取。
    • 解析服务:通过 App.GetService()app.ApplicationServices.GetService() 获取服务。
  • Configure 方法自动注入
    • IApplicationBuilderIWebHostEnvironment 参数会自动注入到 Configure 方法中。

8. 关于 appsettings.json 配置

配置文件灵活性

  • Furion 允许在任意项目层的根目录下创建配置文件(如 dbsettings.json),Furion 会自动合并所有配置。
  • 注意:非启动层的配置文件不能命名为 appsettings.json,否则会覆盖启动层的配置。
  • 复制属性:确保配置文件设置为“始终复制”或“较新复制”。

9. WebApplication 对象配置(ASP.NET 6+)

中间件注册:从 ASP.NET 6 开始,中间件的注册由 IApplicationBuilder 转变为 WebApplication 类型。
示例

app.UseEndpoints(builder =>
{
    builder.MapHealthChecks("/healthz");  // 配置健康检查终结点
});

你可能感兴趣的:(企业级技术,c#,asp.net,架构,.net,学习)