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 上