在 Aspire 项目下使用 AgileConfig

什么是 Aspire

.NET Aspire 是一组工具、模板和包,用于构建易于监控的、可投入生产的应用程序。.NET Aspire 通过一系列 NuGet 包交付,这些包通过启动或解决现代应用开发中的特定问题来提升开发效率。 如今的应用通常使用大量服务,例如数据库、消息传送和缓存,其中许多服务通过 .NET Aspire 集成得到支持。
Aspire 是微软发布的一项新技术。最近社区也有人跟我提需求说 AgileConfig 要支持 Aspire。
因为这不是 Aspire 的介绍文章,所以不过多表述。想要了解可参考以下文档:
https://learn.microsoft.com/zh-cn/dotnet/aspire/get-started/aspire-overview

使用 AgileConfig 的传统方式

通常我们使用 AgileConfig 至少需要以下步骤:

  1. 使用 docker run 命令把服务端跑起来
  2. 配置 admin 密码
  3. 添加应用,设置 appId,secret
  4. 在客户端项目添加 client 包,修改 appsettings 配置文件

通过以上步骤后,你的应用至少应该是能成功连上 AgileConfig 服务端了。

在 Aspire 下使用 AgileConfig

下面让我们看看如何在 Aspire 下使用 AgileConfig。
相信大家肯定看过一些 Aspire 的案例。一些 infrastructure 的组件(比如 Sqlserver 数据库),可以通过 Aspire 直接运行起来,通过代码进行一些简单的配置后,其他项目就可以使用了。
那么使用 AgileConfig 也是一样。让我们直接看代码吧。

新建 Aspire 项目

使用 VS 新建一个标准 Aspire 项目。最后我们会得到这样一个解决方案:

  • AspireProjectWithAgileConfig.ApiService
  • AspireProjectWithAgileConfig.AppHost
  • AspireProjectWithAgileConfig.Web

他们之间的依赖关系如下:

在 AppHost 项目上使用 AgileConfig

dotnet add package AgileConfig.Aspire.Hosting --version 1.0.0

首先安装 AgileConfig.Aspire.Hosting。 这个包是 AgileConfig 服务端的一个扩展。使用它配合 Aspire 可以直接启动 AgileConfig 容器并且简单配置它。

安装完后,我们在 Program 下添加如下代码:

using Aspire.Hosting.AgileConfig;var builder = DistributedApplication.CreateBuilder(args);var agileConfig = builder.AddAgileConfig(); // 添加 AgileConfig 服务端,这会启动一个 Containervar agileConfig_apiservice = agileConfig.AddApp("apiservice"); // 在 AgileConfig 添加一个应用 apiservice,客户端会从这里读取业务
var agileConfig_webfrontend = agileConfig.AddApp("webfrontend"); // 在 AgileConfig 添加一个应用 webfrontend,客户端会从这里读取业务var apiService = builder.AddProject<Projects.AspireProjectWithAgileConfig_ApiService>("apiservice");
var webFrontend = builder.AddProject<Projects.AspireProjectWithAgileConfig_Web>("webfrontend").WithExternalHttpEndpoints();apiService.WithReference(agileConfig_apiservice); // apiservice 项目引用 agileConfig_apiservice 应用
apiService.WaitFor(agileConfig); // apiservice 项目等待 agileConfig container 启动后再启动自己webFrontend.WithReference(agileConfig_webfrontend);  // webFrontend 项目引用 agileConfig_webfrontend 应用
webFrontend.WaitFor(agileConfig); // webFrontend 项目等待 agileConfig container 启动后再启动自己webFrontend.WithReference(apiService);
webFrontend.WaitFor(apiService);builder.Build().Run();

让我们解释一下关键代码:

  1. 添加 AgileConfig 服务端
var agileConfig = builder.AddAgileConfig();

作用:启动一个 AgileConfig 服务端的 Docker 容器,作为配置中心。

  1. 在 AgileConfig 中注册应用
var agileConfig_apiservice = agileConfig.AddApp("apiservice");
var agileConfig_webfrontend = agileConfig.AddApp("webfrontend");

作用:在 AgileConfig 中注册两个应用 apiservice 和 webfrontend,它们的配置信息会被客户端读取。

细节:这两个应用对应实际的后端 API 和前端 Web 项目,后续客户端(如 apiService 和 webFrontend)会从 AgileConfig 中读取它们的配置。

  1. 配置依赖关系
// API 服务依赖 AgileConfig 中的 apiservice 配置
apiService.WithReference(agileConfig_apiservice);
apiService.WaitFor(agileConfig); // 等待 AgileConfig 容器启动// Web 前端依赖 AgileConfig 中的 webfrontend 配置
webFrontend.WithReference(agileConfig_webfrontend);
webFrontend.WaitFor(agileConfig); // 等待 AgileConfig 容器启动// Web 前端依赖 API 服务
webFrontend.WithReference(apiService);
webFrontend.WaitFor(apiService); // 等待 API 服务启动

作用:定义服务启动顺序和依赖关系。

关键方法:

WithReference():声明某个服务依赖另一个服务(如配置或另一个项目)。

WaitFor():确保被依赖的服务启动后再启动当前服务。

  1. 新的依赖关系如下

在客户端项目上使用 AgileConfig.Client

要连接 AgileConfig 服务端,我们需要在客户端项目添加新的包引用:

dotnet add package AgileConfig.Client.Aspire --version 1.0.0

以 ApiService 项目为例:

using Aspire.AgileConfig.Client;var appName = "apiservice";var builder = WebApplication.CreateBuilder(args);builder.Host.UseAspireAgileConfig(appName);

客户端项目现在配置起来就超级简单了,只需要一行代码就解决问题了,你甚至不需要去配置 appsettings 来指定 agileconfig 的相关配置它就能运行了。

运行

下面让我们运行整个项目看看效果吧。

通过 Aspire 的控制台我们可以看到 AgileConfig 的相关资源以及 2 个 project 项目都已经启动了。

点击 AgileConfig 的终结点可以直接打开 AgileConfig 的控制台。使用 admin/123456 默认密码就可以登录进去。

打开应用配置界面,可以看到 apiService, webfrontend 项目已经自动建立起来。

打开终端界面,可以看到有两个客户端连接在服务端上。

点击 webFrontend 的终结点可以直接打开这个 blazor 项目,可以正常运行。

总结

以上我们通过一个简单的示例演示了在 Aspire 下如何使用 AgileConfig。跟传统方案比起来,你不再需要关心:如何使用 docker 运行 AgileConfig 的服务端,不再需要关心如何在 appsettings 下添加 AgileConfig 的相关配置。
可以看到过程还是非常丝滑的。

源代码在这:
https://github.com/kklldog/Aspire.Hosting.AgileConfig

https://github.com/dotnetcore/AgileConfig

关注我的公众号一起玩转技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892482.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastAPI路由与请求处理进阶指南:解锁企业级API开发黑科技

title: FastAPI路由与请求处理进阶指南:解锁企业级API开发黑科技 🔥 date: 2025/3/3 updated: 2025/3/3 author: cmdragon excerpt: 5种高级路由模式(正则路由/权重路由/动态路由) 请求体嵌套与多文件流式上传方案 用依赖注入实现百万级QPS路由的性能优化 11个生产级错误…

第3阶段 --- 期权行情拆解演练 -- 3月

3.2日 【第50个打卡】1.小刀介绍期权大赛这个新打卡,门槛比较高。我暂时不符合,截图仅仅是了解!!!解决交易中,长线做成短线;把短线做成了长线;---- 这个东西是需要通过复盘来解决的。 不管是做买方,还是卖方,这个长短线问题,是一定要解决的。截图来讲,行情是刚开始…

Unity导出微信小游戏问题【持续收录】

在unity中导出微信小游戏时提示报错:Error building Player: Incompatible color space with graphics API 答:在菜单栏 File/Project Settings/Player -> Other Setting中,将Color Space修改为Gamma。 导出微信小游戏后,在微信开发者工具中导入项目后,报错 app.json: …

VSCode 缺少模块ModuleNotFoundError

使用.env配置PYTHONPATH来完成模块的加载在单一模块文件中添加 import sys; sys.path.append("..") 多个模块还是仍然存在无法运行该子程序,就会出现如下ModuleNotFoundError 解决方法: 项目根目录下创建.env 文件 # .env 解决了设置PYTHONPATH环境变量配置,防止项…

SharePoint 列表直接触发Power Automate

前言我们在使用SharePoint列表触发Automate的情况,经常是通过列表的新建、更新事件,其实,我们还可以选择项目,直接运行Automate。正文1.选择新建一个流,如下图:2.我这里选择See your flows,如下图:3.然后会打开Power Automate,新建一个Flow,类型要选择对,如下图:4.…

SharePoint 使用列表创建调查

前言最近,SharePoint Online多了一个新功能叫Forms,蛮有意思的。正文1.新建一个列表,做个演示(我这里选择的空列表,后面觉得如果在Excel里做好列表结构,根据Excel可能会更快),如下图:2.名字叫Survey,然后创建,如下图:3.在列表的菜单栏里有个Forms,点击,如下图:4…

2025 胜选邮寄

Day 0 通知双休,趁这个机会参加一下省选。为了找回手感进行了几场模拟赛,结果被清一色干麻了,根本来不及和牌。 Day 1Day 2后记 单推梅拉米一辈子。

SharePoint Online 页面布局的新功能

前言最近,SharePoint Online上线了一些新功能,比较引人注目的就是页面布局的新功能,更加的灵活多变了。正文1.我们新建一个页面,来做一下测试,如下图2.这里我们可以选择模板,然后点击Create Page新建页面,如下图:3.添加Section,添加flexible section,如下图:好伤心,…

【直播预告】第7期搜索客 Meetup | 开源智能搜索与知识库管理,极限科技 Coco AI 产品介绍

本次活动由 搜索客社区、极限科技(INFINI Labs)联合举办,活动邀请到 INFINI Labs 创始人& CEO 曾勇 来分享和演示极限科技最新推出的开源搜索产品 Coco AI ,欢迎预约直播观看 ~ 活动主题:开源智能搜索与知识库管理,极限科技 Coco AI 产品介绍 活动时间:2025 年 03 月…

使用Node.js打造交互式脚手架,简化模板下载与项目创建

在上一篇文章中,我们探讨了如何构建一个通用的脚手架框架。今天,我们将在此基础上进一步扩展脚手架的功能,赋予它下载项目模板的能力。 通常情况下,我们可以将项目模板发布到 npm 上,或者在公司内部利用私有 npm 仓库进行托管。通过交互式命令行界面,开发者可以轻松选择项…

V90通过EPOS位置控制

硬件组态选择西门子报文111V-ASSISTANT的设置选择EPOS选111报文设置IP设置减速比设置限位及原点传感器设置控制字以启用输入输出设置回零参数电机抱闸设置在线检查设置完毕后,自动优化电机设置点动速度的控制字电机监控和诊断状态字参数保存后需重启驱动器才能生效。 LU单位和…

2025年 IDEA 插件推荐,告别低效!

前言 IDEA插件没有绝对的好坏,每个人的需求不一样,选择合适的插件,并定期清理和维护,才能提高效率,否则适得其反。 Rainbow Brackets 会将不同层级的括号用不同的颜色标记出来,很快就能分辨出括号的对应关系,避免括号匹配错误。 我更喜欢默认的括号高亮显示,它已经足够…