Вызов службы с внедрением зависимостей Blazor .NET10 даже не срабатываетC#

Место общения программистов C#
Ответить
Anonymous
 Вызов службы с внедрением зависимостей Blazor .NET10 даже не срабатывает

Сообщение Anonymous »

У меня возникла проблема с Blazor, который не запускает или не завершает вызов, когда я внедряю интерфейс службы для выполнения некоторых вызовов серверной части/базы данных и использую его на своей странице.
У меня есть уровень службы с интерфейсом как,

Код: Выделить всё

public interface IDataServices
{
Task GetJobConfigurationsAsync();
}
С его реализацией,

Код: Выделить всё

    public class JobConfigDataServices : IDataServices
{
// this is my Repository layer, will be injected via DI
private readonly IDataRepository _jobConfigRepository;
private readonly ILogger _logger;
public JobConfigDataServices(IDataRepository jobConfigRepository, ILogger logger)
{
_jobConfigRepository = jobConfigRepository;
_logger = logger;
}

public async Task GetJobConfigurationsAsync()
{
var getAllQuery = @"select Id, JobName, AppName, ParamName, ParamValue, ParamOrder, CreatedDate, UpdatedDate from DBSchema.JobConfigurations";
var getAllJobConfigs = await _jobConfigRepository.GetResultCollectionAsync(getAllQuery);
return getAllJobConfigs;
}
}
Реализация, в свою очередь, вызывает общий вызов класса Repository, который использует исключительно Dapper ORM для получения данных. Этот репозиторий уже работает во всех случаях и хорошо протестирован, чтобы делать то, что должен. Поэтому я не делюсь здесь подробностями реализации. GetResultCollectionAsync() предоставит сбор данных типа модели JobConfigurations.
Теперь так выглядит моя страница Blazor:

Код: Выделить всё

@page "/jobconfigs"
@using JobsStatus.Contracts
@using JobsStatus.Services

@inject IDataServices jobService

Job Configurations

This is the Job Configurations page.

@if (isLoading)
{
Loading...
}
else if (!string.IsNullOrEmpty(errorMessage))
{
@errorMessage
}
else
{
@foreach (var job in DbJobs)
{

[b]@job.JobName[/b] - @job.AppName

}
}


@code {
private IEnumerable DbJobs { get; set; } = Array.Empty();
private bool isLoading = true;
private string? errorMessage;

protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender || !isLoading)
{
return;
}

try
{
DbJobs = await jobService.GetJobConfigurationsAsync();
}
catch (Exception ex)
{
errorMessage = $"Failed to load job configurations: {ex.Message}";
}
finally
{
isLoading = false;
await InvokeAsync(StateHasChanged);
}
}
}

Мои DI в Program.cs выглядят так:

Код: Выделить всё

            var builder = WebApplication.CreateBuilder(args);

// Add Infrastructure services
builder.Services.Configure(builder.Configuration.Bind);

// Add the injections for the data services
builder.Services.AddScoped(typeof(IDataRepository), typeof(MmdDataRepository));
builder.Services.AddScoped();

// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days.  You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);
app.UseHttpsRedirection();

app.UseAntiforgery();

app.MapStaticAssets();
app.MapRazorComponents()
.AddInteractiveServerRenderMode();

app.Run();
При наличии всего этого, когда я запускаю свое приложение и перехожу к https://localhost:###/jobconfigs, который является маршрутом моей страницы к указанной выше странице бритвы, он ничего не делает. У меня есть точки останова во всех возможных местах, в том числе в OnInitializedAsync() раньше, а также в OnAfterRenderAsync(), но безуспешно. Это даже не срабатывает и не попадает сюда.
Если я удалю строку @inject IDataServices jobService на моей странице razor, все события будут обработаны и достигнуты точки останова.
Если это может помочь, мой App.razor будет выглядеть так, как показано ниже: Я добавил @rendermode="InteractiveServer" в соответствии с некоторыми предложениями ИИ, но безуспешно. Я предполагаю (могу ошибаться), что весь этот опыт взят из разработки веб-приложений Blazor на базе .NET 10 и NET10.
Чего мне не хватает и что не так в моем коде?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ven-firing
Ответить

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

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

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

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

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