我添加了一个后台服务,该服务会定期执行某些操作,例如官方示例。
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddHostedService<TimedHostedService>(); <-- here
services.AddSingleton<WeatherForecastService>();
}
TimedHostedService具有StartAsync
和StopAsync
。最终,我想在网络浏览器中调用它们。
在默认脚手架的FetchData.razor
文件中,我尝试直接引用该服务,但这没有用。因此,我在Start
中添加了Stop
和WeatherForecastService
方法,并在点击事件中对其进行了调用。
<button @onclick="()=> { ForecastService.Stop(); }">Stop</button>
现在,问题是,我不知道如何在TimedHostedService
的{{1}}方法中获取Stop
的运行实例。
WeatherForecastService
我尝试使用依赖注入来获取服务提供者,但是public class WeatherForecastService
{
....
public void Stop()
{
//how to get TimedHostedService instance?
}
....
}
返回null。
GetService
答案 0 :(得分:1)
我对从GUI操纵服务的智慧表示怀疑,但如果您确定要这样做,则与如何注册该服务有关。
在启动时:
services.AddSingleton<TimedHostedService>();
services.AddHostedService(sp => sp.GetRequiredService<TimedHostedService>());
然后您就可以
@inject TimedHostedService TimedService