首页 > 编程语言 >.NET Aspire 外部参数 (External parameters)

.NET Aspire 外部参数 (External parameters)

时间:2024-04-03 14:23:31浏览次数:18  
标签:parameters builder insertionRows value var External Aspire Parameter app

.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();

标签:parameters,builder,insertionRows,value,var,External,Aspire,Parameter,app
From: https://www.cnblogs.com/haogj/p/18112617

相关文章

  • 入门 .NET Aspire: 使用 .NET 简化云原生应用开发
    入门.NETAspire:使用.NET简化云原生应用开发https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire-simplifying-cloud-native-development-with-dotnet-8/经历多个版本之后,我们一直在朝着我们正在进行的理想目标之一取得进展。使.NET成为全球构建云原生应用......
  • .NET Aspire 中的服务发现
    .NETAspire中的服务发现https://www.nuget.org/packages/Microsoft.Extensions.ServiceDiscovery.NETAspire中的服务发现.NETAspire包含了对于开发阶段和测试阶段配置服务发现的功能。该功能通过提供基于配置的服务端点解析器来实现,来自.NETAspireAppHost项目中的服......
  • ABAP PARAMETERS 功能及用法
    前言千篇一律,实用最要紧。PARAMETERS可用于文本输入,单选/复选框,与SELECT-OPTIONS不同的是,PARAMETERS只能用于单个输入。功能实例PARAMETERS:P_CARRIDTYPECDEFAULT'1',"DEFAULT默认值P_CONNIDTYPEMARA-MATNRMEMORYIDMAB,"'MEMORYID'将PARAMETERS存储在SAP......
  • 通过nginx来验证k8s中externalTrafficPolicy策略
    过nginx来验证k8s中externalTrafficPolicy策略域名--->172.16.80.32(域名解析反向代理)----->nginx-pod1(Local模式,模拟前端代理到nginx2-pod2)----->nginx2-pod2(Cluster模式,实际后端服务)nginx的日志格式log_formatmain'"$remote_addr""$remote_user""......
  • .NET Aspire Preview 4 发布!
    .NETAspirePreview4isnowavailable!Here'sasummaryofwhat'snewinthispreviewrelease:.NETAspirePreview4现已推出!以下是此预览版中新增内容的摘要:Podman  Supportforrunningappswith podman支持使用 podman 运行应用程序Dashboard  仪表板......
  • 关于树莓派5(Ubnutu 23.10和树莓派5自带的系统通用)下载时出现error: externally-manage
    一.报错产生的原因  最近作者更新了这两个系统,在作者想去安装非 Debian的库的时候总是出现以下的报错:error:externally-managed-environment这是因为树莓派5升级了服务器系统,从Debian11到了Debian12,这个服务器系统对于外接库的限制还是比较严格的。作者也按照系......
  • 2-AP-14: Create procedures with parameters to organize code and make it easier t
        ChapterModule/LessonBigIdeas/Topics/ConceptsStandards(CSTA)LearningObjectivesChapter1Module1,Lesson1Sequences,ProblemSolving1A-AP-10:Developprogramswithsequencesandsimpleloops,toexpressideasoraddress......
  • 在K8S中,nodePort的externalTrafficPolicy字段有什么作用?
    在Kubernetes(K8s)中,externalTrafficPolicy字段是Service对象的一个属性,它主要应用于NodePort和LoadBalancer类型的服务,用于控制外部流量进入集群后如何路由到后端的Pods。externalTrafficPolicy可以设置为两种值:Cluster(默认值)和Local。Cluster:当externalTraf......
  • dremio SupportsExternalQuery 简单说明
    dremio的外部查询实际上就是让我们可以通过sql直接查询source而不是通过复杂的处理,可以解决一些sql函数不能使用的问题对于实现了SupportsExternalQuery接口的存储扩展就可以实现此功能,比如jdbc的(属于ce扩展)参考语法SELECT*FROMtable(my_oracle.external_que......
  • Go - named result parameters
           ......