Dam*_*les 3 asp.net-core blazor blazor-server-side
我添加了一个定期执行某些操作的后台服务,例如官方示例。
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddHostedService<TimedHostedService>(); <-- here
services.AddSingleton<WeatherForecastService>();
}
Run Code Online (Sandbox Code Playgroud)
TimedHostedService有和。 最终,我想在网络浏览器中调用这些。StartAsync
StopAsync
在FetchData.razor
默认脚手架的文件中,我尝试直接引用该服务,但这不起作用。因此,我添加了Start
和Stop
方法WeatherForecastService
并在单击事件上调用它们。
<button @onclick="()=> { ForecastService.Stop(); }">Stop</button>
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我不知道如何TimedHostedService
在Stop
的方法中获取 的运行实例WeatherForecastService
。
public class WeatherForecastService
{
....
public void Stop()
{
//how to get TimedHostedService instance?
}
....
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用依赖注入来获取服务提供者,但GetService
返回 null。
IServiceProvider sp;
public WeatherForecastService(IServiceProvider sp)
{
this.sp = sp;
}
public void Stop()
{
var ts = sp.GetService(typeof(TimedHostedService)) as TimedHostedService;
ts.StopAsync(new CancellationToken());
}
Run Code Online (Sandbox Code Playgroud)
我质疑从 GUI 操作服务是否明智,但如果您确定需要这样做,那么问题就在于如何注册该服务。
启动时:
services.AddSingleton<TimedHostedService>();
services.AddHostedService(sp => sp.GetRequiredService<TimedHostedService>());
Run Code Online (Sandbox Code Playgroud)
然后你就可以
@inject TimedHostedService TimedService
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7423 次 |
最近记录: |