Как использовать Hangfire с внедрением зависимостей в ASP.NET Core?C#

Место общения программистов C#
Ответить
Anonymous
 Как использовать Hangfire с внедрением зависимостей в ASP.NET Core?

Сообщение Anonymous »

Я хотел бы запустить повторяющееся задание, которое ранее было зарегистрировано в IoC в ASP.NET Core 8.
Примерно так:
  • Я регистрирую класс в IoC.
  • Фреймворк заботится обо всех зависимостях, которые нужны моему классу.
  • Затем я хотел бы использовать Hangfire для запуска метода из этого зарегистрированного класса со всеми зависимости разрешаются платформой.
По сути, у меня есть эта конфигурация для Hangfire.

Код: Выделить всё

builder.Services.AddHangfire(config => config
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseInMemoryStorage());

builder.Services.AddHangfireServer();
После этого у меня есть следующий класс MappingStoringGroup, зарегистрированный в IoC, следующим образом:

Код: Выделить всё

builder.Services.AddKeyedScoped(nameof(MappingTask));
builder.Services.AddKeyedScoped(nameof(StoringTask));

builder.Services.AddScoped();

builder.Services.AddKeyedScoped(nameof(MappingStoringGroup), (provider, key) =>
{
var taskGroup = new MappingStoringGroupBuilder()
.AddTask(provider.GetRequiredKeyedService(nameof(MappingTask)))
.AddTask(provider.GetRequiredKeyedService(nameof(StoringTask)))
.CreateTaskGroup();

return taskGroup;
});
Мне нужно примерно следующее:

Код: Выделить всё

app.UseHangfireDashboard();

RecurringJob.AddOrUpdate("job id", nameof(MappingStoringGroup), tg => tg.RunTasks(), Cron.Hourly);

app.Run();
Есть две причины, по которым мне нужно зарегистрировать MappingStoringGroup вот так в IoC. Во-первых, все классы задач, добавленные в MappingStoringGroup, имеют разные зависимости в конструкторе. Во-вторых, MappingStoringGroup.RunTasks() также будет вызываться через контроллер, выполняя задачи вручную.
Я пытался использовать Hangfire во время регистрации MappingStoringGroup.< /p>
Например:

Код: Выделить всё

builder.Services.AddKeyedScoped(nameof(MappingStoringGroup), (provider, key) =>
{
var taskGroup = new MappingStoringGroupBuilder()
.AddTask(provider.GetRequiredKeyedService(nameof(MappingTask)))
.AddTask(provider.GetRequiredKeyedService(nameof(StoringTask)))
.CreateTaskGroup();

RecurringJob.AddOrUpdate("job id", () => taskGroup.RunTasks(), Cron.Hourly);

return taskGroup;
});
Но это не сработало. На панели инструментов Hangfire не будет отображаться повторяющихся заданий.

Подробнее здесь: https://stackoverflow.com/questions/788 ... p-net-core
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»