我正在尝试使用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
所以请尝试装饰这样的类名
[JobDisplayNameAttribute("MyClassName")]
public class ServiceName : IServiceName