Blazor WASM установил глобальный класс во время program.cs для DIC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Blazor WASM установил глобальный класс во время program.cs для DI

Сообщение Anonymous »

Я новичок в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему мое приложение Blazor Wasm загружает 90 файлов .wasm при каждом обновлении страницы?
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Невозможно найти ни глобальный класс приложения, ни Global. asax-файл
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Получение ввода DateTime в Blazor WASM
    Гость » » в форуме C#
    0 Ответы
    52 Просмотры
    Последнее сообщение Гость
  • @bind-Value в Blazor WASM
    Гость » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Гость
  • Реализация IDisposable: применяются ли рекомендации по умолчанию при использовании Blazor Wasm?
    Гость » » в форуме C#
    0 Ответы
    32 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»