gpt4 book ai didi

使用接口(interface)排队的 Hangfire 作业忽略类/方法级别的指定作业过滤器

转载 作者:行者123 更新时间:2023-12-05 06:36:49 24 4
gpt4 key购买 nike

考虑我们有以下类:

[AutomaticRetry(Attempts = 3)]
public class EmailSender : IEmailSender
{
[ErrorReporting(Attempts = 1)]
public async Task Send()
{
}
}

public interface IEmailSender
{
Task Send();
}

我们以这种方式入队作业:

backgroundJobClient.Enqueue<IEmailSender>(s => s.Send());

顺便提一下,我使用 SimpleInjector,它是 Hangfire 作业激活器。

首先,AutomaticRetry 属性中的Attempts 属性没有被考虑在内。当涉及到 ErrorReporting 自定义属性时,它根本不会执行。

似乎 Hangfire 只检查注册类型(在我的例子中是接口(interface))上定义的属性,而不是将要解析的实例类型。

在我的例子中,IEmailSender 是在单独的项目中定义的。我相信一种解决方案是将它与 EmailSender 和自定义属性实现放在一起,并在接口(interface)级别定义属性,但我不想这样做,因为我的 Hangfire 作业是在 Windows 中处理的服务和作业本身由客户端(使用接口(interface))排队,因此客户端无需了解任何有关实现的信息。

你知道我如何才能很好地解决这个问题吗?在 Windows 服务中创建 BackgroundJobServer 时,我们能否以某种方式配置这些过滤器?

最佳答案

我是这样解决的: https://gist.github.com/rwasik/80f1dc1b7bbb8b8a9b47192f0dfd4664

如果您有任何其他想法,请告诉我。

关于使用接口(interface)排队的 Hangfire 作业忽略类/方法级别的指定作业过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48802010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com