【问题标题】:How can I use a service outside of Startup.cs in my ASP.NET Core Application?如何在我的 ASP.NET Core 应用程序中使用 Startup.cs 之外的服务?
【发布时间】:2020-03-05 01:27:03
【问题描述】:

我有一个用作“作业调度程序”的 ASP.NET Core 应用程序,因此我需要让应用程序为已配置的作业运行 cron 作业。我想出了一个方法来做到这一点,但不幸的是,它只适用于使用 IServiceCollection 抽象类的 Startup.cs 文件。由于此应用程序的性质,我需要能够在发出发布请求时在我的控制器中添加一个 cron 作业。

这是我在 Startup.cs 中添加 cron 作业的方法:

public void ConfigureServices(IServiceCollection services)
        {
                // Basic config code above here

                services.AddCronJob<CronJob>(c =>
                {
                    c.TimeZoneInfo = TimeZoneInfo.Local;
                    c.CronExpression = @"" + cronEx;
                    Console.WriteLine(c.CronExpression);
                });
            }
        }

这是我的 API 控制器以及我正在尝试做的事情:

// POST: api/Jobs
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see https://aka.ms/RazorPagesCRUD.
[HttpPost]
public async Task<ActionResult<Job>> PostJob(Job job)
{
    _context.Job.Add(job);
    await _context.SaveChangesAsync();

    services.AddCronJob<CronJob>(c =>
    {
          c.TimeZoneInfo = TimeZoneInfo.Local;
          c.CronExpression = @"" + job.CronExpression;
    });

    return CreatedAtAction("GetJob", new { id = job.Id }, job);
}

我不完全确定这是否可能,但任何见解都会有所帮助。

【问题讨论】:

  • 服务是您在客户端请求和服务器之间添加的中间件。与中间件相关的所有内容都应仅适用于 startup.cs。也许您可以在启动时执行 services.AddCronJob,方法是读取正文内容以在请求调用控制器中的 PostJob 之前进行检查。

标签: c# asp.net entity-framework asp.net-core entity-framework-core


【解决方案1】:

第一个问题,如果您每次都需要将此 cron 作业添加为新服务。

如果您想将应用程序用作调度程序,那么最好的办法是使用 IHostedService - Documentation link

这里有一些如何使用 IHostedService 制作简单调度程序的示例 - Scheduler example based on IHostedService

【讨论】:

    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多