我想每小时更新一次数据库中的数据。所以,我觉得很好FluentScheduler库并创建我的 IJob
:
public class InfoLoader : IJob
{
private readonly DataContext _db;
public InfoLoader(DataContext db)
{
_db = db;
}
public void Execute()
{
foreach (User user in _db.Users.ToList())
{
foreach (Info i in user.Info.ToList())
{
UpdateInfo(i);
}
}
}
private void UpdateInfo(Info info)
{
// do some operations to update information in db
}
}
当然,我创建了我的 Registry
实现来安排我需要的所有任务:
public class LoadersRegistry : Registry
{
public LoadersRegistry()
{
Schedule<InfoLoader>().ToRunNow().AndEvery(1).Hours();
}
}
我还在我的 Program.cs 文件中添加以下代码来初始化调度程序并启动它:
JobManager.JobException += (obj) => { logger.LogError(obj.Exception.Message); };
JobManager.Initialize(new LoadersRegistry());
但是当我运行我的应用程序时,我看到以下错误:
我知道 LoadersRegistry
无法创建 InfoLoader
的实例(在 JobManger
期间在 Program.cs
中初始化它>),因为 InfoLoader
接收 DataContext
。但是我不能不接收 DataContext
,因为我需要它来向我的数据库中添加数据。
很遗憾,我找不到解决此问题的方法。
感谢您的帮助。
附言我读到了 using FluentScheduler in asp.net core ,但是这个库的开发者说这个特性will not be available in the future因为this ,所以我仍然不知道如何解决这个问题。
最佳答案
根据 API 文档,您必须更改注册方式。 以下只是其中一种方法。
public LoadersRegistry()
{
var dataContext = new DataContext();
Schedule(()=> new InfoLoader(dataContext)).ToRunNow().AndEvery(1).Hours();
}
这里我正在做 new DataContext() 但你可以让 dataContext 可用,只要你用它来更新 InfoLoader。
关于c# - 在 .NET Core API 应用程序中使用 FluentScheduler 期间的 DependencyInjection 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845952/