带有Blazor的MediatrNotifications(WASM)-事件处理程序不更新UI



我正试图在客户端Blazor应用程序中挂接MediatR,纯粹是为了处理组件之间的事件通知。

事件被发布,它被一个带有处理程序的单独组件接收,但我无法从处理程序更新UI。

我认为原因是MediatR调用的处理程序与UI组件使用的处理程序不是同一个实例。这有道理吗?

有人在Blazor中使用过MediatR通知吗?

发布组件:

@inject MediatR.IMediator _mediator
<h3>Sender</h3>
<button @onclick="SendNotification">Send notification</button>
@code {
private void SendNotification()
{
_mediator.Publish(new MyNotification { Message = "Hello World!" });
}
}

订阅组件:

@using MediatR;
@implements INotificationHandler<MyNotification>;
<h3>Receiver</h3>
<p>Message: @Message</p>
@code {
private string Message { get; set; } = "[No message]";
public Task Handle(MyNotification notification, System.Threading.CancellationToken cancellationToken)
{
Message = notification.Message; // <-- THIS DOES NOT UPDATE THE UI
return Task.CompletedTask;
}
}

通知:

public class MyNotification : INotification
{
public string Message { get; set; }
}

Main:

public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddMediatR(typeof(Program));
await builder.Build().RunAsync();
}

这个想法是Blazor应用程序应该监听MediatR命令,并在发生这种情况时更新UI组件。要做到这一点,您需要:

  1. 处理由MediatR处理程序触发的状态管理事件
  2. 让您的Blazor组件订阅此事件并使用StateHasChanged刷新UI-您可以看到";State Container";Blazor文章中组件之间通信的3种方式中的示例

相关内容

  • 没有找到相关文章

最新更新