使用HangFire启动实现接口的作业时如何使用自定义作业名称

问题描述 投票:0回答:1

我正在尝试使用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}");
    }
}
c# .net-core hangfire
1个回答
0
投票

尝试使用JobDisplayNameAttribute。

我在代码中看到了几个可以渲染它的地方...

在RecurringJobsPage和JobDetailsPage中,您可以看到它调用HtmlHelper.JobName

HtmlHelper有一些代码在寻找JobDisplayNameAttribute

https://github.com/HangfireIO/Hangfire/blob/a07ad0b9926923db75747d92796c5a9db39c1a87/src/Hangfire.Core/Dashboard/HtmlHelper.cs

所以请尝试装饰这样的类名

[JobDisplayNameAttribute("MyClassName")]
public class ServiceName : IServiceName

© www.soinside.com 2019 - 2024. All rights reserved.