Я добавил фоновый сервис, который периодически что-то делает, например, официальный образец.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddHostedService<TimedHostedService>(); <-- here
services.AddSingleton<WeatherForecastService>();
}
TimedHostedService имеет StartAsync
и StopAsync
. В конечном счете, я хочу вызвать их в веб-браузере.
В файле FetchData.razor
в стандартных лесах я пытался ссылаться на эту службу напрямую, но это не сработало. Итак, я добавил Start
и Stop
метод к WeatherForecastService
и вызвал их для события click.
<button @onclick="()=> { ForecastService.Stop(); }">Stop</button>
Теперь проблема в том, что я не знаю, как получитьзапуск экземпляра TimedHostedService
в методе Stop
WeatherForecastService
.
public class WeatherForecastService
{
....
public void Stop()
{
//how to get TimedHostedService instance?
}
....
}
Я пытался использовать внедрение зависимостей для получения поставщика услуг, но GetService
вернул ноль.
IServiceProvider sp;
public WeatherForecastService(IServiceProvider sp)
{
this.sp = sp;
}
public void Stop()
{
var ts = sp.GetService(typeof(TimedHostedService)) as TimedHostedService;
ts.StopAsync(new CancellationToken());
}