Hangfire.Autofac 与 MVC 应用程序 - 注入失败

2024-03-29

我正在尝试创建一个简单的 Hangfire 测试,但它不起作用。以下是所有重要的代码,以及我如何使用 Hangire.Autofac 配置它。不知道我在这里缺少什么。我在 /hangfire dashbaord 中遇到的异常也在下面。

public class AmazonSqsService : IAmazonSqsService
{
    private readonly IBackgroundJobClient _backgroundJobClient;
    private readonly ILogService _logService;

    public AmazonSqsService(IBackgroundJobClient backgroundJobClient, ILogService logService) 
    {

        _backgroundJobClient. = backgroundJobClient;
        _logService= logService;
    }

    public async Task<string> Test()
    {

        return _backgroundJobClient.Enqueue(() => Looper());

    }

    public void Looper() {
        while (true) { _logService.Info("In Looper Loop"); Thread.Sleep(5000); } 
    } 
}

 public partial class Startup
{
    public static IContainer ConfigureContainer()
    {
        var builder = new ContainerBuilder();
        RegisterApplicationComponents(builder);
        AppGlobal.Container = builder.Build();
    }

    public static void RegisterApplicationComponents(ContainerBuilder builder)
    {
        builder.RegisterType<LogService>().As<ILogService>().InstancePerLifetimeScope();
        builder.RegisterType<AmazonSqsService>().As<IAmazonSqsService>().InstancePerLifetimeScope();
        builder.RegisterType<BackgroundJobClient>().As<IBackgroundJobClient>().InstancePerLifetimeScope();
        builder.Register(c => JobStorage.Current).As<JobStorage>().InstancePerLifetimeScope();
        builder.Register(c => new StateMachineFactory(JobStorage.Current)).As<IStateMachineFactory>().InstancePerLifetimeScope();

    }

    public static void ConfigureHangfire(IAppBuilder app) 
    {
        app.UseHangfire(config =>
        {
            config.UseAutofacActivator(AppGlobal.Container);
            config.UseSqlServerStorage("DefaultDatabase");
            config.UseServer();
        });
    }
}

但是,在仪表板中,我不断收到此任务错误:

失败 作业激活期间发生异常。 Autofac.Core.Registration.ComponentNotRegisteredException

请求的服务“App.Services.AmazonSqsService”尚未注册。要避免此异常,请注册一个组件来提供服务,使用 IsRegistered() 检查服务注册,或者使用 ResolveOptional() 方法来解析可选依赖项。


最终想通了这一点。

正确用法:

public class Service : IService {
      public void MethodToQueue() { ... }
}

public class AnyOtherClass {
     public void StartTasks() {
          BackgroundJob.Enqueue<IService>(x => x.MethodToQueue()); //Good
     } 
}

不正确的用法(我做错了什么)

public class Service : IService {
     public void StartTasks() {
          BackgroundJob.Enqueue(() => this.MethodToQueue()); //Bad
     } 

      public void MethodToQueue() { ... }
}

public class AnyOtherClass {
     public AnyOtherClass(IService service) {
          service.StartTasks();
     }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hangfire.Autofac 与 MVC 应用程序 - 注入失败 的相关文章

随机推荐

  • 如何使用单个bat文件传递动态参数来运行一个exe

    我需要运行一个 EXE 它将采用 7 个参数 其中一个参数是动态的 有人可以帮助我如何通过使用bat文件传递动态参数来运行EXE吗 谢谢 柴塔尼亚 如果您需要执行带有动态数量参数的命令 您可以使用 命令示例 foo exe options
  • C 变量名定义中使用下划线的原因是什么?

    我试图了解开发人员何时需要定义C前面带有 的变量 其原因何在 例如 uint32 t xyz 0 也许这有帮助 来自 C99 7 1 3 保留标识符 所有以下划线和大写字母或其他字母开头的标识符 下划线始终保留用于任何用途 所有以下划线开头
  • 如何解释 Google perf 工具 CPU 分析器中的地址

    我的 C 程序消耗大量 CPU 并且在运行时消耗更多 我使用 Google 性能工具来分析 CPU 使用情况 这就是我得到的结果 pprof top Total 1343 samples 1330 99 0 99 0 1330 99 0 0
  • 是否可以让ScrollView滚动到底部?

    对于一个类似聊天的应用程序 我想保留一个ScrollView组件滚动到底部 因为最新消息出现在旧消息下方 我们可以调整a的滚动位置吗ScrollView For React Native 0 41 及更高版本 您可以使用内置的scrollT
  • 如何获取 Spring Boot 应用程序建立的活动数据库连接数

    我已经使用 Oracle 数据源构建了一个 Spring Boot 应用程序 我需要在日志语句中打印总活动连接 如何获取活动连接 注意 不是最大活动连接数 它应该是 特定时间 实例的活动连接数 DataSource dataSource D
  • iOS 金属线宽

    我想设置我在金属中绘制的线条的宽度 我可以设置一个点的大小point size正如所解释的here https developer apple com library prerelease ios documentation Metal R
  • node js 从 URL 获取 Zip 并上传到 Google 云端硬盘

    我正在尝试从网址获取 zip 文件 以便在下一步中将其上传到 Google 云端硬盘 但我的代码不起作用 The method to get the zip File from the url function getFile var fi
  • python Tkinter() 如何隐藏 UI

    嗨 我正在使用 Tkinter 在 python 中开发单个登录 我只希望当用户正确登录时 登录 UI 将被隐藏 内容 UI 将显示 所以我认为 ui 可以隐藏或者可见性将被隐藏 例如我有这个代码 def httpGETCheck user
  • Magento - 重新索引过程存在问题 - 目录产品 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我刚刚重新索引了运行 v1 6 的 Magenot 安装上的数据 现在我收到一条消息 指出 There was a pr
  • 图像/视频序列中的模糊检测

    我在 photo stackexchange 上问过这个问题 但认为它也可能在这里相关 因为我想在我的实现中以编程方式实现这个问题 我正在尝试为我的成像 管道实现模糊检测算法 我想要检测的模糊是 1 相机抖动 当快门速度较低时 用手移动 抖
  • Oracle 12c - 删除表和所有关联的分区

    我在 Oracle 12c 中创建了表 t1 表有数据 它在列表分区上分区 并且还有子分区 现在我想删除整个表和所有关联的分区 和子分区 这是删除全部的正确命令吗 DROP TABLE t1 PURGE 语法是正确的 但不是优选的 只需删除
  • 将字符串标记为 HTML 安全

    我正在尝试构建我的第一个 Rails 应用程序 并且正在使用瑞恩 希思 Ryan Heath 的 navigation helper https github com rpheath navigation helper插件为我提供导航中的当
  • VSCode python 扩展:如何禁用插入导入语句的自动完成功能?

    在 VS Code 的 Python 扩展中 我有时发现自动完成功能可以包含尚未导入到我正在编辑的文件中的选项 当选择这些选项之一时 导入有时会在没有通知的情况下插入到模块的顶部 虽然我可以看到此功能中的实用程序 但我不太喜欢这种行为 因为
  • x86 区分指令和数据的方法

    是否有一种或多或少可靠的方法来判断内存中某个位置的数据是处理器指令的开头还是其他数据 例如 E8 3F BD 6A 00 may be call操作说明 E8 相对偏移量为0x6ABD3F 或者它可能是属于其他指令的三个字节的数据 后跟pu
  • 如何在 Http 响应完成之前读取响应流

    当使用 HttpWebRequest 对象发出请求时 我需要调用方法 GetResponse 来发送请求并获取响应 此方法的问题是 在收到所有数据之前 它不会返回响应对象 假设我正在下载一个 100 MB 的文件 在响应完成并且所有 100
  • Java - 嵌套内嵌套的Gson解析

    我必须与 API 进行交互 并且响应格式 根据我所读到的 似乎结构很差 我发现谷歌小组回复了一个有点类似的问题here http groups google com group google gson browse thread threa
  • 如何在 SQL/Spark/GraphFrames 中进行此转换

    我有一个包含以下两列的表 Device Id Account Id d1 a1 d2 a1 d1 a2 d2 a3 d3 a4 d3 a5 d4 a6 d1 a4 Device Id 是安装我的应用程序的设备的唯一 ID Account I
  • java.lang.ClassCastException:Jboss Resteasy 日志记录

    我正在使用 Jboss7 0 1 Final 来部署我的 Web 应用程序 但我不想使用 Jboss 提供的默认 Resteasy jar 所以我做了以下更改jboss deployment structure xml
  • linq:随机排序

    我如何更改下面的代码 以便每次从数据库中获取 50 个不同的随机数据 return from examQ in idb Exam Question Int Tbl where examQ Exam Tbl ID exam id select
  • Hangfire.Autofac 与 MVC 应用程序 - 注入失败

    我正在尝试创建一个简单的 Hangfire 测试 但它不起作用 以下是所有重要的代码 以及我如何使用 Hangire Autofac 配置它 不知道我在这里缺少什么 我在 hangfire dashbaord 中遇到的异常也在下面 publ