Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET核心应用程序中使用Startup.cs之外的服务?_C#_Asp.net_Entity Framework_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 如何在ASP.NET核心应用程序中使用Startup.cs之外的服务?

C# 如何在ASP.NET核心应用程序中使用Startup.cs之外的服务?,c#,asp.net,entity-framework,asp.net-core,entity-framework-core,C#,Asp.net,Entity Framework,Asp.net Core,Entity Framework Core,我有一个ASP.NET核心应用程序,作为一种“作业调度器”,因此我需要让应用程序为配置的作业运行cron作业。我想出了一个方法来实现这一点,但不幸的是,它只能在Startup.cs文件中使用IServiceCollection抽象类。由于此应用程序的性质,我需要能够在发出post请求时在控制器中添加cron作业 下面是我如何在Startup.cs中添加cron作业的: public void ConfigureServices(IServiceCollection services)

我有一个ASP.NET核心应用程序,作为一种“作业调度器”,因此我需要让应用程序为配置的作业运行cron作业。我想出了一个方法来实现这一点,但不幸的是,它只能在Startup.cs文件中使用IServiceCollection抽象类。由于此应用程序的性质,我需要能够在发出post请求时在控制器中添加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);
                });
            }
        }

public void配置服务(IServiceCollection服务)
{
//上面的基本配置代码
services.AddCronJob(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);
}
//POST:api/Jobs
//若要防止套印攻击,请启用要绑定到的特定属性,例如
//更多详细信息请参见https://aka.ms/RazorPagesCRUD.
[HttpPost]
公共异步任务PostJob(作业作业)
{
_context.Job.Add(作业);
wait_context.SaveChangesAsync();
services.AddCronJob(c=>
{
c、 TimeZoneInfo=TimeZoneInfo.Local;
c、 CronExpression=@“+job.CronExpression;
});
返回CreateDataAction(“GetJob”,new{id=job.id},job);
}

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

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

如果您想将应用程序用作调度器,那么最好使用IHostedService-


这里有一些如何使用IHostedService制作简单调度器的示例-

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