Blazor WebAssembly 3.2.0 Preview 3 - Использование настроек приложения. {Environment}. json в Program.cs - PullRequest
0 голосов
/ 02 апреля 2020

Я использую Blazor WebAssembly 3.2.0 Preview 3 / Stati c / Клиентская сторона

Сейчас я использую #if DEBUG #else #endif для строковой переменной "backendUrl ». Я хотел бы загрузить этот параметр из appsettings. {Environment}. json.

Я могу получить конфигурацию после var host = builder.Build(); ( информация из Microsoft Docs, см. Пример кода ниже и ссылка здесь выше ), но служба gRP C называется до этого.

Подробнее о настройке приложения. {Environment}. json в Blazor WebAssembly 3.2.0 Preview 3

Мой вопрос: возможно ли или я должен продолжать использовать #if DEBUG и c. ( Я бы хотел использовать настройки приложений, когда это возможно где-нибудь в моем коде. )

Часть моей программы.cs

    string backendUrl = string.Empty;
#if DEBUG
    backendUrl = "https://localhost:5001"; // Local debug URL
#else
    backendUrl = "https://<example>.com:5001"; // Production URL
#endif
    builder.Services.AddSingleton(services =>
    {
        // Create a gRPC-Web channel pointing to the backend server.
        // GrpcWebText is used because server streaming requires it. If server streaming is not used in your app
        // then GrpcWeb is recommended because it produces smaller messages.
        var httpClient = new HttpClient(new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler()));
        var channel = GrpcChannel.ForAddress(backendUrl, new GrpcChannelOptions { HttpClient = httpClient });
        return channel;
    });

    // load settings from appsettings.{environment}.json
    // see: https://docs.microsoft.com/en-us/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.1#add-services-to-an-app
    var host = builder.Build();

    var backendDomain = host.Configuration["Settings:BackEndDomain"];
    Console.WriteLine($"Backend Domain: {backendDomain}");

    await host.RunAsync();

    // original
    // await builder.Build().RunAsync();

1 Ответ

0 голосов
/ 03 апреля 2020

Я также разместил этот вопрос на GitHub dotnet / aspnetcore, и Джеймс Ньютон-Кинг придумал ответ, см .: https://github.com/dotnet/aspnetcore/issues/20442#issuecomment -608064432

JamesNK:

Вы сможете получить IConfiguration внутри AddSingleton. например,

builder.Services.AddSingleton(services =>
{
    var configuration = services.GetRequiredService<IConfiguration>();
    var backendUrl = configuration["BackendUrl"];

    // Create a gRPC-Web channel pointing to the backend server.
    // GrpcWebText is used because server streaming requires it. If server streaming is not used in your app
    // then GrpcWeb is recommended because it produces smaller messages.
    var httpClient = new HttpClient(new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler()));
    var channel = GrpcChannel.ForAddress(backendUrl, new GrpcChannelOptions { HttpClient = httpClient });
    return channel;
});
...