Наше приложение Blazor работает на preview9
.
Я пытаюсь реализовать компонент .razor
, который прослушивает событие из службы NotificationService, которую мы написали, чтобы обновить представление при каждом вызове службы,но я, кажется, что-то упускаю;
У меня есть интерфейс службы (для краткости сокращен);
public interface INotificationService
{
event Action OnChange;
Task<ServiceResponse<Notification>> AddNotificationAsync(Notification notification);
}
, и в моей реализации я вызываю событие OnChange
(снова сокращено для краткости));
public async Task<ServiceResponse<Notification>> AddNotificationAsync(Notification notification)
{
/*...*/
StateChanged();
}
Где StateChanged()
есть;
public event Action OnChange;
private void StateChanged() => OnChange?.Invoke();
В моем Blazor.Client
я разрешил INotificationService
в ConfigureServices
следующим образом;
services.AddScoped<INotificationService, NotificationService>();
Затем я внедряю службу в компонент, который я хочу подписать на событие OnChange()
;
@inject INotificationService NotificationService
protected override async Task OnInitializedAsync()
{
NotificationService.OnChange += StateHasChanged;
}
А затем на другой моей странице razor
я снова внедряю ту же службу и вызываю AddNotificationAsync
method;
@inject INotificationService NotificationService
await NotificationService.AddNotificationAsync(
new Notification {
Level = NotificationLevel.Success,
Text = $"Agreement Type with Id = {agreementType.Id} has been successfully added.".ToString()
});
Однако вызов t NotificationService.AddNotificationAsync
не вызывает OnChange
, а затем StateHasChanged
компонента, так как компонент не обновляется?Есть идеи, что я делаю не так, пожалуйста?