c# - 使用 HangFire 启动实现接口的作业时如何使用自定义作业名称
问题描述
我正在尝试使用 HangFire 来安排任何实现我调用的某个接口的类IScheduledService
。这些服务按预期运行,但 HangFire UI 始终为 HangFire 仪表板中的每个服务显示相同的名称PerformService()
。我知道这是设计使然,因为我将相同的函数名称传递给每个作业,但用户并不真正知道正在运行什么特定作业。
我创建了接口,ServiceName
因为我认为可以将其传递给 HangFire 以覆盖可见的作业名称而不是被调用的函数的名称,但看不到修改作业名称的能力。有没有办法提供自定义作业名称,以便 HangFire UI 将根据ServiceName
属性值显示每个作业的标题?
public interface IScheduledService
{
string ServiceId { get; }
string ServiceName { get; }
void PerformService();
}
public class Service1 : IScheduledService
{
public string ServiceId { get => "e56643b1-f0cf-44b2-81ef-bf7a085de760"; }
public string ServiceName { get => this.GetType().Name; }
public void PerformService()
{
Console.WriteLine($"Hello world from {ServiceName}");
}
}
解决方案
尝试使用 JobDisplayNameAttribute。
我在代码中看到了几个可能被渲染的地方......
在 RecurringJobsPage 和 JobDetailsPage 你可以看到它调用 HtmlHelper.JobName
HtmlHelper 有一些寻找 JobDisplayNameAttribute 的代码
您可以在 1.7.0 版已关闭的问题中看到对它的引用。如果你在那个版本上。
https://github.com/HangfireIO/Hangfire/issues/1136
在旧问题中也有一些关于在方法上使用 DisplayNameAttribute 的参考。
尝试像这样使用 JobDisplayName 或 DisplayName 装饰方法
[JobDisplayName("RunJobNumberOne")]
public void RunSomeJob(string arg){
推荐阅读
- r - 从邻接矩阵不生成边
- javascript - 如何将数据从中间件传递到路由器?
- azure - Azure EventGrid 队列以编程方式将消息设置为永不过期
- c - 如何释放 pcre2_get_ovector_pointer 方法分配的内存?
- tensorflow - 将标签作为具有 shape(m,1) 或 shape(m,) 的 numpy 数组提供给模型
- .net - 如何使用 ReactJS Fetch 从 Net Framework 4.5 中的 HttpResponseMessage 获取数据
- javascript - Postgresql 列存在,但获取关系列不存在
- swift - OptionSet 中 rawValue 的正确值?
- ruby-on-rails - rails6 app: minitest 失败,ActionView::Template::Error: uninitialized constant
- javascript - 无法让 vue-google-charts 在浏览器模式下工作