Blazor里,如何在 razor 页面使用 BackgroundService 实例

Blazor 使用 BackgroundService 需要注册

builder.Services.AddHostedService<PageStateService>();

razor 页面要使用 PageStateService 的实例,需要 PageStateService 有接口,我们给 PageStateService 写一个接口 IPageStateService

然后在页面直接注入实例

@inject IPageStateService pageStateService

这个时候启动程序页面会报错

还需要把 AddHostedService 注册的这个服务的实例和接口关联

builder.Services.AddSingleton<IPageStateService>(provider =>provider.GetServices<IHostedService>().OfType<PageStateService>().Single());

这样 IPageStateService 和 AddHostedService 的实例就是同一个对象了

完整代码就这样

 

按单例注入

builder.Services.AddSingleton<ActionsManager>();
builder.Services.AddSingleton<IHostedService>(provider => provider.GetRequiredService<ActionsManager>());
builder.Services.AddSingleton<IActionsManager>(provider => provider.GetRequiredService<ActionsManager>());
AddHostedService 并不会在宿主管理器里声明单例,所以当你要单例使用 BackgroundService 的时候,
最好先 AddSingleton 一个单例对象,再把这个对象绑定在 IHostedService 上
posted @ 2024-02-01 16:48  cchong005  阅读(35)  评论(0编辑  收藏  举报