Я пытаюсь иметь некоторую базовую конфигурацию из файла 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 в качестве одноэлементной службы
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();
to
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;
}
Мне нужно установить каждое свойство вручную, от этого тоже нужно избавиться