.NET Aspire 外部参数 (External parameters)

https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/external-parameters

环境提供应用运行的上下文。Parameter 提供了在应用运行中请求外部值的功能。当应用本地运行的时候,Parameter 可以为应用提供值,或者在应用部署的时候,提示值。Parameter 可以用于建模各种场景,包括密钥,连接串,以及其它在各种环境下变得不同的配置值。

参数值

参数的值可以通过 app host 的配置读取,然后用于本地运行的应用。当部署应用的时候,实际的值会通过参数值来获得。

考虑下面的 app host 的 Program.cs 示例。

var builder = DistributedApplication.CreateBuilder(args);

// Add a parameter
IResourceBuilder<ParameterResource> value = builder.AddParameter("value"); builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("EXAMPLE_VALUE", value);

相应的 appsettings.json 为:

{
"Parameters": {
"value": "local-value"
}
}

参数在清单中表示为名为 parameter.v0 的新基元:

{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string"
}
}
}
}
}

密钥

参数 Parameter 还可以用来建模密钥。当一个 Parameter 标记为密钥的时候,它提示清单该值应该被看做密钥。在部署中需要提示并保存在安全的位置。

当在本地运行的时候,该值将通过 app host 的配置中的 Parameters 配置节中读取出来。

考虑下面的 app host 中的 Program.cs 代码示例:

var builder = DistributedApplication.CreateBuilder(args);

// Add a secret parameter
var secret = builder.AddParameter("secret", secret: true); builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("SECRET", secret); builder.Build().Run();

现在考虑相应的 app host 中如下的 appsettings.josn

{
"Parameters": {
"secret": "local-secret"
}
}

清单文件中的表示如下:

{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
}
}
}

连接串的值

Parameter 还可以用来建模连接串。在部署中,该值将被提示并保存到安全的位置。

当本地运行的时候,该值将通过 app host 的配置中的 ConnectionString 配置节中读取出来。

注意

连接串用来表示广义的连接信息,包括数据库连接串,消息中间件,以及其它服务。

在 .NET Aspire 的命名方式中,术语 connection string 用来表示任意类型的连接信息。

考虑如下的 app host 的 Program.cs 示例

var builder = DistributedApplication.CreateBuilder(args);

var redis = builder.AddConnectionString("redis");

builder.AddProject<Projects.WebApplication1>("api")
.WithReference(redis); builder.Build().Run();

相应的 app host 的 appsettings.json 如下所示

{
"ConnectionStrings": {
"redis": "local-connection-string"
}
}

清单表示如下所示

{
"resources": {
"redis": {
"type": "parameter.v0",
"connectionString": "{redis.value}",
"value": "{redis.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
}
}
}

Parameter 示例

为了表示 Parameter,考虑如下的示例代码:

var builder = DistributedApplication.CreateBuilder(args);

var db = builder.AddSqlServer("sql")
.PublishAsConnectionString()
.AddDatabase("db"); var insertionRows = builder.AddParameter("insertionRows"); builder.AddProject<Projects.Parameters_ApiService>("api")
.WithEnvironment("InsertionRows", insertionRows)
.WithReference(db); builder.Build().Run();

实际执行如下步骤:

  • 添加了名为 sql 的 SQL Server 资源,并发布为数据库连接串
  • 添加了名为 db 的数据库
  • 添加了名为 insertionRows 的 Parameter
  • 添加了名为 api 的项目,将其关联到项目 Projects.Parameters_ApiService 项目资源类型参数上
  • 将参数 insertionRows 传递给 api 项目
  • 引用 db 数据库

其中的 insertionRows 参数从 app host 的 appsettings.json 中的 Parameters 配置节中读取。

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
},
"Parameters": {
"insertionRows": "1"
}
}

而 Parameters_ApiService 项目消费该 insertionRows 参数,考虑 apiService 项目中的 Program.cs 代码

using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

int insertionRows = builder.Configuration.GetValue<int>("InsertionRows", 1);

builder.AddServiceDefaults();

builder.AddSqlServerDbContext<MyDbContext>("db");

var app = builder.Build();

app.MapGet("/", async (MyDbContext context) =>
{
// You wouldn't normally do this on every call,
// but doing it here just to make this simple.
context.Database.EnsureCreated(); for (var i = 0; i < insertionRows; i++)
{
var entry = new Entry();
await context.Entries.AddAsync(entry);
} await context.SaveChangesAsync(); var entries = await context.Entries.ToListAsync(); return new
{
totalEntries = entries.Count,
entries
};
}); app.Run();

.NET Aspire 外部参数 (External parameters)的更多相关文章

  1. Swift Internal Parameter and External Parameter 外部参数和内部参数

    今天跟大神又学习了些关于IOS开发Swift语言的外部参数和内部参数 func doSomething(num1: Int, num2: Int) -> Int { return num1 + ...

  2. FLEX接收外部参数 .

    FLEX参数传递与FLASH有点不同 login..swf?name=aa&password=bb Flex上是这样接收参数的 myname=mx.core.Application.appli ...

  3. Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

    Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1 ...

  4. Swift 1.1语言函数参数的特殊情况本地参数名外部参数名

    Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4  函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部 ...

  5. awk 传入外部参数

    awk 传入外部参数 num1=1.1 num2=2.2 result=$(awk -v n1=$num1 -v n2=$num2 'BEGIN{print (n2>n1)?1:0}')

  6. Swift - 28 - 内部参数名和外部参数名

    //: Playground - noun: a place where people can play import UIKit // 外部参数的作用是为了让程序员调用代码的时候能清晰的看出所传参数 ...

  7. Mybatis(二)参数(Parameters)传递

    Mybatis参数(Parameters)传递  1..单个参数 可以接受基本类型,对象类型,集合类型的值.这种情况MyBatis可直接使用这个参数,不需要经过任何处理. <!-- 根据id查询 ...

  8. c语言3种链接属性: 外部(external), 内部(internal),无设置(none)

    c语言中,多个文件组合的时候,有可能标示名相同,那么这个时候编译器如何判别的呢?    c语言中有3种链接属性: 外部(external), 内部(internal),无设置(none)    外部( ...

  9. Swift函数_外部参数名,

    //1________________ /** *没使用外部参数名的函数 */ func inputScore(name:String,score1:Int,score2:Int) { } /** * ...

  10. Swift开发经验——外部参数名

    一.什么是外部参数名? 浅显地说,外部参数名就是在调用一个方法时要在方法的参数前面加上一个特定的名字,目的是便于阅读代码,提高维护效率.   二.在最新的Xcode中,外部参数名的性质与用法如下 性质 ...

随机推荐

  1. USB协议详解第2讲(协议核心学习要点)

    USB协议详解第2讲(协议核心学习要点) 看了这么多概念,想必大家会问"我要学会USB协议,并且会编程,我具体要学习那些有关的内容?",这一篇我们将会讲解在学习USB协议中务必要掌 ...

  2. cf2009 Codeforces Round 971 (Div. 4)

    A. Minimize! 签到题.计算\((c-a)+(b-c)\)的最小值,其实值固定的,等于\(b-a\). int a, b; void solve() { cin >> a > ...

  3. 03 Transformer 中的多头注意力(Multi-Head Attention)Pytorch代码实现

    3:20 来个赞 24:43 弹幕,是否懂了 QKV 相乘(QKV 同源),QK 相乘得到相似度A,AV 相乘得到注意力值 Z 第一步实现一个自注意力机制 自注意力计算 def self_attent ...

  4. Java高并发synchronized讲解生产者消费者

    问题描述 题目:两个线程操作一个变量,实现两个线程对同一个资源一个进行加1操作,另外一个进行减1操作,且需要交替实现,变量的初始值为0.即两个线程对同一个资源进行加一减一交替操作.话不多说,开干首先我 ...

  5. DHorse v1.6.0 发布,基于 k8s 的发布平台

    版本说明 新增特性 支持Codeup(阿里云云效)代码仓库: 支持环境的自动部署: 优化特性 管理员角色部署环境部需要审批: 优化页面展示: 升级指南 升级指南 DHorse介绍 DHorse是一个轻 ...

  6. 买了个mini主机当服务器

    虽然有苹果的电脑,但是在装一些软件的时候,从想着能不能有一个小型的服务器,免得各种设置什么帮我强各种别的导致Mac出现各种的异常,整体上的话去看了一些小的主机,看过苹果的MV迷你Mac,但是发现是太贵 ...

  7. 【Azure Bot Service】部署Python ChatBot代码到App Service中

    问题描述 使用Python编写了ChatBot,在部署到App Service,却无法启动. 通过高级工具(Kudu站点:https://<your site name>.scm.chin ...

  8. 🎈Fluent Editor 富文本开源2个月的总结:增加格式刷、截屏、TypeScript 类型声明等新特性

    你好,我是 Kagol,个人公众号:前端开源星球. Fluent Editor 是一个基于 Quill 2.0 的富文本编辑器,在 Quill 基础上扩展了丰富的模块和格式,框架无关. 功能强大.开箱 ...

  9. “地表最强”人形机器人亮相:视觉&语音推理能力

    Figure 02配备了机载的视觉语言模型(VLM),使其能够进行快速的常识性视觉推理. 相关: https://mbd.baidu.com/newspage/data/landingsuper?co ...

  10. 定制jekins-slave-jnlp镜像封装docker和kebectl命令实现pipline

    基于官方:jenkins/inbound-agent:latest DockerHub成品: docker pull svipghy/jenkins-jnlp-slave:v1 Dockerfile ...