c# - 在 .NET Core API 应用程序中使用 FluentScheduler 期间的 DependencyInjection 问题

标签 c# asp.net-core dependency-injection .net-core fluentscheduler

我想每小时更新一次数据库中的数据。所以,我觉得很好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());

但是当我运行我的应用程序时,我看到以下错误:

Running app

我知道 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/

相关文章:

c# - 是否可以从组件继承 Razor 标记?

c# - 无法从程序集办公室 writer.process() 加载类型 'System.Data.OleDb.OleDbType'

java - 在不在 Activity 的 Jersey 错误范围内运行的代码中检测到 HK2 故障

c# - 以编程方式显示桌面

mysql - Entity Framework 主干 json 大小为 65535

c# - 减少大对象堆中同一个对象的多个副本

java - 尝试将 JpaRepository 注入(inject) AWS Lambda 时没有合格的 bean

unit-testing - TDD - 在重构时引入类时 - 该类是否应该进行单元测试?

c# - AppDomain.CurrentDomain.BaseDirectory 和 Application.ExecutablePath 在实践中有什么区别?

c# - 对 C# Web 服务的静态引用