#.net #attributes #hangfire
Вопрос:
У меня есть Hangfire
консольное приложение на C# ( .NET 5.0
). Это конфигурация:
var serviceProvider = new ServiceCollection()
.AddLogging()
.AddSingleton<ITask1BL, Task1BL>()
.BuildServiceProvider();
GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseColouredConsoleLogProvider()
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseActivator(new ContainerJobActivator(serviceProvider))
.UseFilter(new HFJobFilterAttribute("me"))
.UseSqlServerStorage("Server=MM\SQLEXPRESS;Database=HangfireTest;Trusted_Connection=True;", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
});
// BackgroundJob.Enqueue<ITask1BL>(x => x.SendMessage());
RecurringJob.RemoveIfExists("sendMessageTest1");
RecurringJob.AddOrUpdate<ITask1BL>("sendMessageTest1", x => x.SendMessage(), Cron.Minutely);
RecurringJob.RemoveIfExists("receiveMessageTest1");
RecurringJob.AddOrUpdate<ITask1BL>("receiveMessageTest1", x => x.ReceiveMessage(), Cron.Minutely);
using (var server = new BackgroundJobServer())
{
Console.ReadLine();
}
Это мой атрибут:
public class HFJobFilterAttribute : JobFilterAttribute, IClientFilter, IServerFilter, IElectStateFilter, IApplyStateFilter
{
private readonly string userName;
public HFJobFilterAttribute(string userName):base()
{
this.userName = userName;
}
public void OnCreating(CreatingContext context)
{
...
И мои задания, одно с атрибутом, второе без атрибута:
public class Task1BL : ITask1BL
{
[HFJobFilter("me")]
public int SendMessage()
{
...
}
public int ReceiveMessage()
{
..
Я хотел добавить задания Hangfire
, но когда я запускаю сервер с фильтром, я хотел запускать только задания с заданным атрибутом. Не на всех работах. Теперь, несмотря на то, что я добавил UseFilter
, каждая работа выполнена.