Udostępnij za pośrednictwem


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 projektu Projects.Parameters_ApiService.
  • Przekazuje parametr insertionRows do projektu api.
  • 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();

Zobacz też