我有一个.Net Worker服务,它每分钟执行一次方法ReadCycle(). 现在我必须扩展该项目,以便也可以使用API Endpoint调用该方法. 目前,我让API端点正常工作,但我无法将ReadCycle()与API控制器中的响应链接起来. 我该怎么做呢?

Worker,其中我要调用的方法是:

   private readonly ILogger<Worker> _logger;
   private readonly IConfiguration Configuration;
   //Stuff

   public Worker(ILogger<Worker> logger, IConfiguration configuration)
   {
       _logger = logger;
       Configuration = configuration;
   }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
            while (!stoppingToken.IsCancellationRequested)
        {
            ReadCycle();                                
            await Task.Delay(time, stoppingToken);
        }            
    }
    public void ReadCycle()
    {
        //do Stuff
    }

API控制器

[Route("api/[controller]")]
[ApiController]
public class Controller:ControllerBase
{
    [HttpPost]
    public async Task<ActionResult<string>> Post(Model model)
    {            
        //ReadCycle Call here;
        Worker.ReadCycle();  //This is obviously not working
        return CreatedAtAction("POST","Cycle Completed");
    }
}

计划

public static void Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);

    builder.Services.AddControllers();
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    builder.Services.AddHostedService<Worker>();

    var app = builder.Build();

    // Configure the HTTP request pipeline.
    if (app.Environment.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
    }

    app.UseHttpsRedirection();
    //app.UseAuthorization();
    app.MapControllers();
    app.Run();
}

推荐答案

您可以这样访问Worker.

    public class ValuesController : ControllerBase
    {
        private readonly IServiceProvider serviceProvider;

        public ValuesController(IServiceProvider serviceProvider)
        {
            this.serviceProvider = serviceProvider;
        }
        [HttpGet("test")]
        public void test()
        {
            var worker = serviceProvider.GetServices<IHostedService>()
                                    .OfType<Worker>()
                                    .FirstOrDefault();
            worker.ReadCycle();
        }
    }

Csharp相关问答推荐

C++/C#HostFXR通过std::tuple传递参数

Select Many和默认IfEmpty内部Select Many错误工作

. NET JSON属性自定义所需逻辑

.NET HttpClient、JsonSerializer或误用的Stream中的内存泄漏?

如何使用C#中的主构造函数功能使用多个构造函数?

C#无法让WinForm进度条生成动画错误跨线程操作无效

如何将MongoDB序列化程序设置为内部对象属性

从VS调试器而不是测试资源管理器运行的调试NUnitDotNet测试

在DoubleClick上交换DataGridViewImageColumn的图像和工具提示

当使用Dapper映射DBNull时,我可以抛出异常吗?

如何在onNext之前等待订阅者完成?

WPF DataGrid文件名列,允许直接输入文本或通过对话框按键浏览

我什么时候应该在Dapper中使用Connection.OpenAsync?

此异步方法在重写方法中缺少等待运算符警告

忽略Visual Studio代码中的StyleCop规则

为什么我的自定义Json.net转换器不工作?

无效的Zip文件-Zip存档

使用C#代码和SQL SERVER中的相同证书签名会产生不同的结果

缩写的MonthNames有问题

MudBlazor MudTabs-->;选项卡内容高度