我想每小时更新一次数据库中的数据。所以,我为此找到了很好的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
,因为我需要它在我的数据库中添加数据。
不幸的是,我找不到解决此问题的方法。
谢谢你的帮助。
PS 我读到过在 asp.net core 中使用 FluentScheduler,但是这个库的开发者说这个功能将来不会因为这个而可用,所以我仍然不知道如何解决这个问题。