Я новичок в Blazor и хочу использовать класс GlobalSettings. Я пробовал использовать CascadingParameters, но в консоли получаю нулевые ошибки, хотя сайт отображается нормально. Я подозреваю, что это связано с порядком загрузки компонентов.
Поэтому я хотел бы использовать DI и заполнить класс во время program.cs, чтобы я мог гарантировать, что он будет доступен к моменту запуска компонентов. рендеринг.
Покопавшись в поиске, я настроил синглтон в program.cs, и все время, пока я явно устанавливаю значения в классе, я вижу их, когда класс вводится (Очевидно). Однако я хочу получить значения из API. Итак, я настроил GetRequiredService, который, как я вижу, запускает нужный мне вызов API и заполняет экземпляр gs. Когда я делаю точку останова при возврате gs;, я вижу, что значение было обновлено по мере необходимости. Однако это не сохраняется, когда я внедряю класс в MainLayout.razor.
У меня такое ощущение, что я допустил очень простую ошибку, но дошёл до того, что не вижу древесина для деревьев! Любая помощь, советы, указатели очень ценятся. Код ниже:
program.cs
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add("#app");
builder.RootComponents.Add("head::after");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new
Uri(builder.Configuration["API_Prefix"] ?? builder.HostEnvironment.BaseAddress) });
builder.Services.AddSingleton();
builder.Services.AddOptions();
var host = builder.Build();
var settingsService = host.Services.GetRequiredService();
await settingsService.GetStuff();
await builder.Build().RunAsync();
Класс TestInject:
public class TestInject
{
public string TestItem { get; set; } = "Item A";
public TestInject()
{
}
public async Task GetStuff() {
var client = new ContentfulClient(new System.Net.Http.HttpClient(), SiteConfig.CONTENTFULAPIKEY, SiteConfig.CONTENTFULPREVIEWAPIKEY, SiteConfig.CONTENTFULSPACEID);
var queryBuilder = QueryBuilder.New.ContentTypeIs("transitionConfig");
var globalSettings = await client.GetEntries(queryBuilder);
TestInject gs = new TestInject() { };
foreach(var item in globalSettings)
{
gs.TestItem = item.phase1Title;
}
return gs;
Подробнее здесь: https://stackoverflow.com/questions/756 ... -cs-for-di
Blazor WASM установил глобальный класс во время program.cs для DI ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему мое приложение Blazor Wasm загружает 90 файлов .wasm при каждом обновлении страницы?
Anonymous » » в форуме C# - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-