当前位置: 首页 > news >正文

应用程序启动配置方式

一、速通一图流

在这里插入图片描述

二、AppStartup 启动总结

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

1. Startup 类(传统方式)

  • .NET 5 的启动方式
    • 通过 Program.cs 中的 UseStartup<TStartup>() 方法指定启动类。
    • Startup 类包含两个主要方法:
      • ConfigureServices(IServiceCollection services):用于配置应用所需的服务。
      • Configure(IApplicationBuilder app, IWebHostEnvironment env):用于配置应用的请求处理管道。
  • .NET 6 之后的变化
    • 微软在 .NET 6 中不再推荐使用 UseStartup<TStartup>(),而是直接在 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 请求重定向为 HTTPSapp.UseRouting();  // 启用路由中间件app.UseCorsAccessor();  // 启用 CORS 中间件app.UseAuthentication();  // 启用身份认证中间件app.UseAuthorization();  // 启用授权中间件app.UseInject();  // 使用 Furion 的依赖注入中间件app.UseEndpoints(endpoints =>{endpoints.MapControllers();  // 映射控制器路由});}
}

7. 构造函数注入说明

  • AppStartup 派生类无法使用构造函数注入服务
  • 解决方案
    • 获取配置 IConfiguration:通过 App.Configuration 获取。
    • 解析服务:通过 App.GetService<TService>()app.ApplicationServices.GetService<TService>() 获取服务。
  • 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");  // 配置健康检查终结点
});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深度学习系列71:表格检测和识别
  • C语言:编译与链接
  • C++基础面试题 | C++中的move有什么作用,它的原理是什么?
  • Linux驱动开发基础(中断)
  • 政策|十部门印发《数字化绿色化协同转型发展实施指南》
  • Prompt-to-prompt image editing with cross attention control
  • 五种多目标优化算法(NSGA3、MOPSO、MOGWO、NGSA2、SPEA2)性能对比,包含47个多目标测试函数,6种评价指标,MATLAB代码
  • vllm 部署GLM4模型进行 Zero-Shot 文本分类实验,让大模型给出分类原因,准确率可提高6%
  • 【Linux网络】CGI技术
  • Linux静态ip/动态ip配置/bond链路聚合/网卡多ip配置
  • 大数据技术之Zookeeper服务器动态上下线监听(6)
  • [新手入门]1台电脑+1个电视+2个软件(sunshine+moonlight) 解决黑神话悟空没有hdmi线的痛...
  • 金银齐飞白银破30,黄金续创新高
  • 【Linux】如何快速查看 linux 服务器有几个cpu
  • 19c库启动报ORA-600 kcbzib_kcrsds_1---惜分飞
  • Android组件 - 收藏集 - 掘金
  • css系列之关于字体的事
  • go append函数以及写入
  • Java知识点总结(JavaIO-打印流)
  • JS+CSS实现数字滚动
  • nodejs:开发并发布一个nodejs包
  • Promise初体验
  • scrapy学习之路4(itemloder的使用)
  • vue 个人积累(使用工具,组件)
  • Vue2 SSR 的优化之旅
  • 阿里云购买磁盘后挂载
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 后端_ThinkPHP5
  • 老板让我十分钟上手nx-admin
  • 前端攻城师
  • -- 数据结构 顺序表 --Java
  • 双管齐下,VMware的容器新战略
  • 用element的upload组件实现多图片上传和压缩
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​虚拟化系列介绍(十)
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #include<初见C语言之指针(5)>
  • $ git push -u origin master 推送到远程库出错
  • (1)(1.11) SiK Radio v2(一)
  • (1)svelte 教程:hello world
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (论文阅读40-45)图像描述1
  • (十一)图像的罗伯特梯度锐化
  • (一)认识微服务
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (正则)提取页面里的img标签
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET Core 2.1路线图