c# – 从asp.net core 2.1中的控制器访问BackgroundService
作者:互联网
我只需要从控制器访问我的BackgroundService.
因为BackgroundServices是注入的
services.AddSingleton<IHostedService, MyBackgroundService>()
如何在Controller类中使用它?
解决方法:
这就是我解决它的方式:
public interface IHostedServiceAccessor<T> where T : IHostedService
{
T Service { get; }
}
public class HostedServiceAccessor<T> : IHostedServiceAccessor<T>
where T : IHostedService
{
public HostedServiceAccessor(IEnumerable<IHostedService> hostedServices)
{
foreach (var service in hostedServices) {
if (service is T match) {
Service = match;
break;
}
}
}
public T Service { get; }
}
然后在初创公司:
services.AddTransient<IHostedServiceAccessor<MyBackgroundService>, HostedServiceAccessor<MyBackgroundService>>();
在我班上需要访问后台服务……
public class MyClass
{
private readonly MyBackgroundService _service;
public MyClass(IHostedServiceAccessor<MyBackgroundService> accessor)
{
_service = accessor.Service ?? throw new ArgumentNullException(nameof(accessor));
}
}
标签:c,asp-net-core,asp-net-core-2-1,background-service 来源: https://codeday.me/bug/20190522/1153070.html