问题标签 [hangfire-autofac]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
251 浏览

hangfire - abp.io + hangfire 问题找不到适合 XXXX 类型的构造函数

我只是想用 ABP.IO 项目和 Hangfire 运行后台作业(我已经用 aspnetboilerplate 完成了它,没有任何问题)

每次我的 recurringjob 开始它都会抛出这个错误:

对于这个测试,我只是在合同项目中编写了一个接口

以及在Application项目中的实现

在网络项目中

但结果是

我需要帮助,因为我不明白我的错误在哪里

问候

0 投票
1 回答
262 浏览

.net-core - 如何在 dotnet 核心控制台应用程序中使用 Autofac 配置 Hangfire

我正在尝试将嵌入在 Kestrel 网络服务器中的工作 Hangfire 设置移植到控制台应用程序。我已经修改了网络应用程序,所以它仍然提供了 Hangfire 仪表板,但没有启动自己的 Hangfire 服务器。

我必须移植的代码使用 Autofac。我已将 Hangfire.Autofac 包添加到控制台应用程序中,并且已经执行了Hangfire Autofac .net core 3.1答案中详述的所有步骤

当我创建作业(使用 Web 应用程序)时,控制台应用程序 Hangfire 服务器尝试执行该作业,但我收到以下失败消息:

为此,我们检查了控制台应用程序中 Autofac 的设置。这就是我设置容器的方式。

当应用程序执行时,遇到断点JobProcessingModule证明以下代码行已执行。

很奇怪,传递给的 containerBuilder 实例JobProcessingModule.Load(containerBuilder)调用的containerBuilder 对象不同。RegisterModule

然而,简化注射剂的实验表明这是正常的,并且注射的物品在返回的容器的注册中仍然可见。

重新检查记录的失败,我们注意到该类是由类名而不是接口提及的。通过删除接口注册来更改注册,像这样

导致在 Hangfire 控制台主机中找到 ProcessManager,但在创建作业时导致 Web 应用程序中的运行时错误。

两种方式都注册它会导致双方都找到 ProcessManager,并出现一个新问题:无法解决依赖关系。然而,这只是同一问题的一个新案例。

虽然这让我可以继续让控制台主机正常工作,但我不喜欢我不理解的代码。当 Web 应用程序不需要时,为什么控制台主机需要按类名注册?

无论是什么原因,这也导致 Hangfire.IBackgroundJobClient 无法解析到后台作业客户端。这是一个hangfire类,所以看起来确实存在一个基本问题。

0 投票
0 回答
85 浏览

dependency-injection - Hangfire 在运行时为作业注册 IoC 依赖关系

问题:大多数作业都依赖于配置依赖性。

理想的解决方案:(如果您已经确切知道如何执行此操作,请在此处和最后复制以节省阅读时间)

我想

  • 在作业 Q 期间(使用过滤器或任何其他选项)保存一些数据(对象/json/字符串)
  • 在作业处理期间:拦截作业的创建过程并使用隐藏的数据将依赖项注册到该作业范围内的 IoC 容器

旧解决方案:对于我要替换的自定义“作业调度程序”,我们采取以下步骤

  • 在解析作业处理器之前,我们创建一个生命周期范围并使用作业数据注册依赖提供的数据
  • 然后使用“工作类型”解决工作和流程

黑客解决方案:所以这对大多数人都有效,但我仍然想知道如何通过创建一个“包装作业”类来完成我想做的事情,该类在运行作业时使用相同的数据来创建相同的范围。

理想的解决方案:理想情况下,我可以注入逻辑和

  • 在保存所需数据期间(有很多方法可以做到这一点)
  • 在作业前处理期间访问 IoC 以创建范围注册此依赖项

我已经尝试/查看了过滤器属性 - 用于保存和恢复数据,但在这里没有找到对 IoC 或生命周期范围的任何访问。

还有一些其他选项,但它们也仅限于“暴露”到 IoC 容器/范围

理想的解决方案:我想

  • 在作业 Q 期间(使用过滤器或任何其他选项)保存一些数据(对象/json/字符串)
  • 在作业处理期间:拦截作业的创建过程并使用隐藏的数据将依赖项注册到该作业范围内的 IoC 容器