问题标签 [hangfire-unity]
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.
c# - 如何将正确的具体类注入封闭系统
Hangfire
看起来很光滑。Hangfire
但是,我在激活正确的具体类时遇到了挑战。
一些背景:
现在,我(可能)拥有数百个作业,它们都继承自IJob
并在继承自IJobPayload
. 在没有深入了解每个作业的执行代码的情况下,我有类似的东西:
要提供基本作业的样本:
我有一个非常简单的 Web API Post 控制器:
下一步是我遇到失败的地方。他和我正在成为最好的朋友。很遗憾!
Hangfire 有 4 个 Enqueue 方法(2 个同步,2 个异步):
他们要么采用静态类:
或者他们采用应该可以从 Unity 解析的类型:
因为我有几十个,分数甚至太多的对象都是基于 IJob的,这些入口点都不适合我。
我什至尝试了一个类来包装我所有的工作并让 Hangfire 执行单个类,到目前为止,没有运气:
现在我可以通过这种方式执行一个具体的实现(谈论混淆!):
依然没有! 而且,你失去了Queue Attribute
每一份工作!
所以,我回到我的startup.cs
文件:
类 UnityConfig:
类 HangfireConfig:
我看不出有什么问题。Unity 有所有的注册。由于我有这么多基于单个接口的对象,我知道我打破了 Unity 通常用于依赖注入的方式。
有什么想法吗?您可以看到对代码的任何调整吗?
TIA
hangfire - 如何统一配置hangfire?
我有 ASP.NET Web API 应用程序。该应用程序使用 Unity 作为 IoC 容器。该应用程序也在使用 Hangfire,我正在尝试将 Hangfire 配置为使用 Unity。
因此,根据文档,我正在使用Hangfire.Unity,它将统一容器注册为 Hangfire 中的当前作业激活器。
我有一个依赖于的类IBackgroundJobClient
然而,即使在配置后Hangfire.Unity
它也无法创建和传递实例BackgroundJobClient
所以我不得不BackgroundJobClient
用统一容器注册每个依赖项。
统一注册
欧文启动
代码正在使用这种配置。但是我有问题:
这是使用 Hangfire 配置 Unity 的正确方法吗?
为什么我需要Hangfire.GlobalConfiguration.Configuration.UseSqlServerStorage("HangfireConnectionString")
在 OWIN 启动中调用,即使SqlServerStorage
已经在 Unity 容器中注册为JobStorage
?
如果我不在 OWIN 启动中调用 UseSqlServerStorage() 方法,那么我会在app.UseHangfireDashboard()
方法上遇到异常。
JobStorage.Current 属性值尚未初始化。您必须在使用 Hangfire 客户端或服务器 API 之前设置它。
hangfire - Hangfire 不使用配置的 Logger 记录异常
从 Hangfire 1.3.0 开始,如果您的应用程序已经通过反射使用了以下库之一(因此 Hangfire 本身不依赖于其中任何一个),则无需执行任何操作。通过按如下所示的顺序检查相应类型的存在来自动选择日志记录实现。
Serilog
NLog
Log4Net
EntLib
记录
Loupe
Elmah
我有Serilog
如下使用的 ASP.NET Core 2.0 应用程序
该应用程序配置为使用 Hangfire。在后台作业处理过程中,如果发生任何异常,Hangfire 会按预期重新尝试作业 10 次,并增加延迟,并在仪表板中显示异常。
问题
Hangfire 仪表板在 UI 上显示异常,但不会将异常记录到配置的 Serilog 接收器中。
注意:Hangfire 仪表板会显示异常,但它会格式化异常, 请参阅此处隐藏有关异常的关键信息。我认为如果它记录异常,Serilog 记录器会记录完整的异常。
asp.net - 使用 Hangfire 在 ASP.NET 应用程序中处理依赖项
Unity
通常在我用作依赖框架的 ASP.NET MVC 应用程序中,我使用PerRequestLifetimeManager
它在 HTTP 请求完成时处理所有依赖关系。
现在我将 Hangfire 配置到 ASP.NET 应用程序中。Hangfire 调度一个依赖于DBContext
. 像下面的东西
(IGenericRepository 使用 DBContext,但为简洁起见,此处未显示代码)
}
然后在应用程序启动时,我注册了一个重复的工作,如下所示
我知道我不能使用PerRequestLifetimeManager
,因为当 Hangfire 安排后台作业时不会有 HttpContext 可用。但是我想知道我应该在这里使用什么生命周期管理器来注册IGenericRepository
,IMyService
这样一旦工作完成,Dispose 方法就会被隐式调用。
hangfire - Hangfire BackgroundJob.Enqueue 运行多次而不是只运行一次
我正在使用这些代码行在我的 Execute 方法中发送电子邮件通知,在该方法中我向用户发送电子邮件,但每次我无法停止任何解决方案时,BackgroundJob.Enqueue都在没有任何限制的情况下运行。