Я пытаюсь получить некоторую базовую конфигурацию из файла json в одноэлементную службу в моем приложении Blazor на стороне клиента при запуске.
Ниже приведены настройки моего кода
AppConfig и IAppConfig файлы
interface IAppConfig
{
string BaseUrl { get; set; }
string Source { get; set; }
}
и
public class AppConfig : IAppConfig
{
public string BaseUrl { get; set; }
public string Source { get; set; }
}
Чем файл json с именем environment.json внутри wwwroot как wwwroot / ConfigFiles / environment.json
Чем служба дляпрочитайте этот файл
interface ISharedServices
{
Task<AppConfig> GetConfigurationAsync();
}
и
public class SharedServices : ISharedServices
{
private HttpClient Http { get; set; }
public SharedServices(HttpClient httpClient)
{
Http = httpClient;
}
public async Task<AppConfig> GetConfigurationAsync()
{
return await Http.GetJsonAsync<AppConfig>("ConfigFiles/environment.json");
}
}
Теперь я вызываю его в свой компонент, который загружается первым
public class IndexComponent : ComponentBase
{
[Inject]
internal IAppConfig AppConfig { get; set; }
[Inject]
internal ISharedServices sharedServices { get; set; }
protected override async Task OnInitializedAsync()
{
var appconfig = await sharedServices.GetConfigurationAsync();
AppConfig = appconfig;
}
}
Все это работает нормально, но я хочучтобы эта конфигурация была готова во время загрузки приложения в браузере, так как это было предложено "auga from mars" в моем другом Вопросе , я попробовал нижеприведенный код в файле startup.cs, в тот момент, когда я добавляю IAppConfig в качестве службы singleton
services.AddSingleton<IAppConfig, AppConfig>(provider =>
{
var http = provider.GetRequiredService<HttpClient>();
return http.GetJsonAsync<AppConfig>("ConfigFiles/environment.json").GetAwaiter().GetResult();
});
Но, купите, используя этот код, приложение Blazor никогда не запускается, все это показывает пустую белую страницу с текстом Загрузка ...., даже не с ошибкой, но через каждые 5 минут всплывающее шоу -перелистывание страницслишком много времени для загрузки с двумя вариантами ожидания и закрытия.
Если я немного изменю этот код с
return http.GetJsonAsync<AppConfig>("ConfigFiles/environment.json").GetAwaiter().GetResult();
на
return http.GetJsonAsync<AppConfig>("ConfigFiles/environment.json").Result;
, чем это сказать -«Максимальный размер стека вызовов превышает»
Как подготовить конфигурацию при запуске ??
Обновление 1:
Небольшое обновление
в файле Basecomponent, код:
protected override async Task OnInitializedAsync()
{
var appconfig = await sharedServices.GetConfigurationAsync();
AppConfig.BaseUrl = appconfig.BaseUrl;
AppConfig.Source = appconfig.Source;
}
Я должен установить каждое свойство одно за другим вручную, от этого тоже нужно избавиться