编程语言
首页 > 编程语言> > c# – 从asp.net core 2.1中的控制器访问BackgroundService

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