Externí parametry
Prostředí poskytují kontext pro spuštění aplikace. Parametry vyjadřují možnost požádat o externí hodnotu při spuštění aplikace. Parametry se dají použít k zadání hodnot aplikaci při místním spuštění nebo k zobrazení výzvy k zadání hodnot při nasazování. Dají se použít k modelování široké škály scénářů, včetně tajných kódů, připojovacích řetězců a dalších hodnot konfigurace, které se můžou mezi prostředími lišit.
Hodnoty parametrů
Hodnoty parametrů se čtou z části Parameters
konfigurace hostitele aplikace a slouží k zadání hodnot aplikaci při místním spuštění. Pokud při publikování aplikace není nakonfigurovaná hodnota, zobrazí se výzva k jejímu zadání.
Podívejte se na následující příklad souboru hostitele aplikace Program.cs:
var builder = DistributedApplication.CreateBuilder(args);
// Add a parameter named "value"
var value = builder.AddParameter("value");
builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("EXAMPLE_VALUE", value);
Předchozí kód přidá do hostitele aplikace parametr s názvem value
. Parametr je pak jako proměnná prostředí s názvem EXAMPLE_VALUE
předán projektu Projects.ApiService
.
Konfigurace hodnot parametrů
Přidání parametrů do konstruktéru je pouze jedním aspektem konfigurace. Musíte také zadat hodnotu parametru. Hodnotu lze zadat v konfiguračním souboru hostitele aplikace, nastavit jako tajný klíč uživatele nebo nakonfigurovat v libovolném jiné standardní konfigurační. Pokud se hodnoty parametrů nenašly, zobrazí se výzva k zadání při publikování aplikace.
Zvažte následující konfigurační soubor hostitele aplikace appsettings.json:
{
"Parameters": {
"value": "local-value"
}
}
Předchozí JSON nakonfiguruje parametr v části Parameters
konfigurace hostitele aplikace. Jinými slovy, hostitel aplikace dokáže najít parametr jako nakonfigurovaný. Můžete například přejít k IDistributedApplicationBuilder.Configuration a získat přístup k hodnotě pomocí klíče Parameters:value
:
var builder = DistributedApplication.CreateBuilder(args);
var key = $"Parameters:value";
var value = builder.Configuration[key]; // value = "local-value"
Důležitý
K této konfigurační hodnotě ale nemusíte přistupovat sami v hostiteli aplikace. Místo toho se ParameterResource používá k předání hodnoty parametru závislým prostředkům. Nejčastěji se jedná o proměnnou prostředí.
Reprezentace parametrů v manifestu
.NET
.NET Aspire používá manifest nasazení k reprezentaci prostředků aplikace a jejich vztahů. Parametry jsou v manifestu reprezentovány jako nový primitivní název parameter.v0
:
{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string"
}
}
}
}
}
Tajné hodnoty
Parametry lze použít k modelování tajných kódů. Pokud je parametr označený jako tajný kód, slouží jako nápověda manifestu, že hodnota by měla být považována za tajný kód. Když aplikaci publikujete, budete vyzváni k zadání hodnoty, která bude uložena v zabezpečeném umístění. Při místním spuštění aplikace se hodnota načte z části Parameters
konfigurace hostitele aplikace.
Podívejte se na následující příklad souboru hostitele aplikace Program.cs:
var builder = DistributedApplication.CreateBuilder(args);
// Add a secret parameter named "secret"
var secret = builder.AddParameter("secret", secret: true);
builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("SECRET", secret);
builder.Build().Run();
Nyní zvažte následující konfigurační soubor hostitele aplikace appsettings.json:
{
"Parameters": {
"secret": "local-secret"
}
}
Reprezentace manifestu je následující:
{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
}
}
}
Hodnoty připojovacího řetězce
Parametry lze použít k modelování připojovacích řetězců. Při publikování aplikace se zobrazí výzva k zadání hodnoty, která je poté uložena na zabezpečeném místě. Při místním spuštění aplikace se hodnota načte z části ConnectionStrings
konfigurace hostitele aplikace.
Poznámka
Připojovací řetězce se používají k reprezentaci široké škály informací o připojení, včetně databázových připojení, zprostředkovatelů zpráv, identifikátorů URI koncových bodů a dalších služeb. V .NET.NET Aspire terminologii se výraz "připojovací řetězec" používá k reprezentaci jakéhokoli druhu informací o připojení.
Podívejte se na následující příklad souboru hostitele aplikace Program.cs:
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddConnectionString("redis");
builder.AddProject<Projects.WebApplication>("api")
.WithReference(redis);
builder.Build().Run();
Nyní zvažte následující konfigurační soubor hostitele aplikace appsettings.json:
{
"ConnectionStrings": {
"redis": "local-connection-string"
}
}
Další informace týkající se připojovacích řetězců a jejich reprezentace v manifestu nasazení naleznete v části Připojovací řetězce a odkazy na vazby.
Příklad parametru
Pokud chcete vyjádřit parametr, zvažte následující ukázkový kód:
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();
Provede se následující kroky:
- Přidá prostředek SQL Server s názvem
sql
a publikuje ho jako připojovací řetězec. - Přidá databázi s názvem
db
. - Přidá parametr s názvem
insertionRows
. - Přidá projekt s názvem
api
a přidruží ho k parametru typu zdroje projektuProjects.Parameters_ApiService
. - Předá parametr
insertionRows
projektuapi
. - Odkazuje na databázi
db
.
Hodnota parametru insertionRows
se načte z části Parameters
konfiguračního souboru hostitele aplikace appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
},
"Parameters": {
"insertionRows": "1"
}
}
Projekt Parameters_ApiService
využívá parametr insertionRows
. Podívejte se na ukázkový soubor 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();