pfe*_*eds 9 mediatr blazor blazor-client-side asp.net-blazor blazor-webassembly
我正在尝试将 MediatR 连接到客户端 Blazor 应用程序中,纯粹是为了处理组件之间的事件通知。
该事件已发布,并且由具有处理程序的单独组件拾取,但我无法从处理程序更新 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!" });
}
}
Run Code Online (Sandbox Code Playgroud)
订阅组件:
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
通知:
public class MyNotification : INotification
{
public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
主要的:
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();
}
Run Code Online (Sandbox Code Playgroud)
这个想法是你的Blazor应用程序应该监听MediatR命令并UI在发生这种情况时更新组件。为此,您需要:
MediatR事件。Blazor组件订阅此事件并使用刷新 UI - 您可以在 Blazor 中组件之间通信的 3 种方法StateHasChanged一文中查看“状态容器”示例。| 归档时间: |
|
| 查看次数: |
2024 次 |
| 最近记录: |