Parametry zewnętrzne
Środowiska zapewniają kontekst, aby aplikacja mogła działać. Parametry umożliwiają żądanie wartości zewnętrznej podczas uruchamiania aplikacji. Parametry mogą służyć do podawania wartości aplikacji podczas uruchamiania lokalnego lub monitowania o wartości podczas wdrażania. Mogą być używane do modelowania szerokiej gamy scenariuszy, w tym tajnych danych, parametrów połączenia i innych wartości konfiguracji, które mogą się różnić w zależności od środowiska.
Wartości parametrów
Wartości parametrów są odczytywane z sekcji Parameters
konfiguracji hosta aplikacji i są używane do podawania wartości aplikacji podczas uruchamiania lokalnego. Jeśli podczas publikowania aplikacji nie skonfigurowano wartości, zostanie wyświetlony monit o podanie jej.
Rozważmy następujący przykładowy plik hosta aplikacji 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);
Powyższy kod dodaje parametr o nazwie value
do hosta aplikacji. Parametr jest następnie przekazywany do projektu Projects.ApiService
jako zmiennej środowiskowej o nazwie EXAMPLE_VALUE
.
Konfigurowanie wartości parametrów
Dodawanie parametrów do konstruktora jest tylko jednym aspektem konfiguracji. Należy również podać wartość parametru . Wartość można podać w pliku konfiguracji hosta aplikacji, ustawić jako wpis tajny użytkownika lub skonfigurować w dowolnej innej standardowej konfiguracji. Gdy wartości parametrów nie zostaną znalezione, będą wyświetlane monity o ich podanie podczas publikowania aplikacji.
Rozważ następujący plik konfiguracji hosta aplikacji appsettings.json:
{
"Parameters": {
"value": "local-value"
}
}
Poprzednio wymieniony JSON konfiguruje parametr w sekcji Parameters
w konfiguracji hosta aplikacji. Innymi słowy, ten host aplikacji może znaleźć parametr zgodnie z jego konfiguracją. Możesz na przykład przejść do IDistributedApplicationBuilder.Configuration i uzyskać dostęp do wartości przy użyciu klucza Parameters:value
:
var builder = DistributedApplication.CreateBuilder(args);
var key = $"Parameters:value";
var value = builder.Configuration[key]; // value = "local-value"
Ważny
Nie musisz jednak uzyskiwać dostępu do tej wartości konfiguracji samodzielnie na hoście aplikacji. Zamiast tego ParameterResource służy do przekazywania wartości parametru do zasobów zależnych. Najczęściej jako zmienna środowiskowa.
Reprezentacja parametrów w manifeście
.NET
.NET Aspire używa manifestu wdrożenia do reprezentowania zasobów aplikacji i ich relacji. Parametry są reprezentowane w manifeście jako nowy element pierwotny o nazwie parameter.v0
:
{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string"
}
}
}
}
}
Wartości tajne
Parametry mogą służyć do modelowania tajemnic. Gdy parametr jest oznaczony jako tajny, służy jako wskazówka dla pliku manifestu, że wartość powinna być traktowana jako tajna. Po opublikowaniu aplikacji zostanie wyświetlony monit o podanie wartości i zapisanie jej w bezpiecznej lokalizacji. Po uruchomieniu aplikacji lokalnie wartość jest odczytywana z sekcji Parameters
konfiguracji hosta aplikacji.
Rozważmy następujący przykładowy plik hosta aplikacji 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();
Teraz rozważ następujący plik konfiguracji hosta aplikacji appsettings.json:
{
"Parameters": {
"secret": "local-secret"
}
}
Reprezentacja manifestu jest następująca:
{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
}
}
}
Wartości ciągu znaków połączenia
Parametry mogą służyć do modelowania ciągów połączenia. Po opublikowaniu aplikacji pojawi się prośba o podanie wartości i jej zapisanie w bezpiecznej lokalizacji. Po uruchomieniu aplikacji lokalnie wartość jest odczytywana z sekcji ConnectionStrings
konfiguracji hosta aplikacji.
Notatka
Parametry połączenia służą do reprezentowania szerokiego zakresu informacji o połączeniu, w tym połączeń z bazą danych, brokerów komunikatów, identyfikatorów URI punktów końcowych i innych usług. W .NET.NET Aspire nomenklaturze termin "parametry połączenia" służy do reprezentowania wszelkich informacji o połączeniu.
Rozważmy następujący przykładowy plik hosta aplikacji Program.cs:
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddConnectionString("redis");
builder.AddProject<Projects.WebApplication>("api")
.WithReference(redis);
builder.Build().Run();
Teraz rozważ następujący plik konfiguracji hosta aplikacji appsettings.json:
{
"ConnectionStrings": {
"redis": "local-connection-string"
}
}
Aby uzyskać więcej informacji dotyczących parametrów połączenia i ich reprezentacji w manifeście wdrożenia, zobacz Parametry połączenia i odwołania do powiązań.
Przykład parametru
Aby wyrazić parametr, rozważmy następujący przykładowy kod:
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();
Wykonano następujące kroki:
- Dodaje zasób SQL Server o nazwie
sql
i publikuje go jako parametry połączenia. - Dodaje bazę danych o nazwie
db
. - Dodaje parametr o nazwie
insertionRows
. - Dodaje projekt o nazwie
api
i kojarzy go z parametrem typu zasobu projektuProjects.Parameters_ApiService
. - Przekazuje parametr
insertionRows
do projektuapi
. - Odwołuje się do bazy danych
db
.
Wartość parametru insertionRows
jest odczytywana z sekcji Parameters
pliku konfiguracji hosta aplikacji appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
},
"Parameters": {
"insertionRows": "1"
}
}
Projekt Parameters_ApiService
używa parametru insertionRows
. Rozważ przykładowy plik 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();