Blazor:如何获取托管服务实例?

时间:2019-10-05 17:53:00

标签: asp.net-core blazor blazor-server-side

我添加了一个后台服务,该服务会定期执行某些操作,例如官方示例。

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor();
    services.AddHostedService<TimedHostedService>(); <-- here
    services.AddSingleton<WeatherForecastService>();
}

TimedHostedService具有StartAsyncStopAsync。最终,我想在网络浏览器中调用它们。

在默认脚手架的FetchData.razor文件中,我尝试直接引用该服务,但这没有用。因此,我在Start中添加了StopWeatherForecastService方法,并在点击事件中对其进行了调用。

<button @onclick="()=> { ForecastService.Stop(); }">Stop</button>

现在,问题是,我不知道如何在TimedHostedService的{​​{1}}方法中获取Stop的运行实例。

WeatherForecastService

我尝试使用依赖注入来获取服务提供者,但是public class WeatherForecastService { .... public void Stop() { //how to get TimedHostedService instance? } .... } 返回null。

GetService

1 个答案:

答案 0 :(得分:1)

我对从GUI操纵服务的智慧表示怀疑,但如果您确定要这样做,则与如何注册该服务有关。

在启动时:

services.AddSingleton<TimedHostedService>();
services.AddHostedService(sp => sp.GetRequiredService<TimedHostedService>());

然后您就可以

@inject TimedHostedService TimedService