Пример вакансии:
Код: Выделить всё
public class CheckFilesJob() : IJob
{
async Task Run()
{
// do something here
}
Код: Выделить всё
public class JobConfiguration
where T : IJob
{
public JobConfiguration(string key, string queueName, Expression jobExpression, string cronExpression)
{
Key = key;
QueueName = queueName;
JobExpression = jobExpression;
CronExpression = cronExpression;
}
public string Key { get; set; }
public string QueueName { get; set; }
public Expression JobExpression { get; set; }
public string CronExpression { get; set; }
}
Код: Выделить всё
new List
{
new JobConfiguration("Check Files",
jobsConfiguration.Value.QueueName,
x => x.Run(),
jobsConfiguration.Value.CheckFilesSchedule),
new JobConfiguration("Another Job", jobsConfiguration.Value.QueueName, x => x.Run(), jobsConfiguration.Value.AnotherJobSchedule)
};
Код: Выделить всё
public static void HandleJobRegistration(
this IServiceProvider serviceProvider,
IEnumerable configurations)
{
// register each job here
}
[*]Не могу создать список IJob, поскольку реализацию невозможно преобразовать в интерфейс (CS1503 ).
[*]Кажется, я не могу пропустить установку IJobConfiguration как универсального, иначе jobExpression, передаваемое в модель, принадлежит интерфейсу (а не реализации).
[*]Я не могу использовать () => new CheckFilesJob().Run(), потому что это будет выглядеть некрасиво, учитывая, сколько сервисов необходимо предоставить для задания.
Пытался работать как с универсальным, так и с неуниверсальным классом, надеясь каким-то образом обеспечить правильное выражение. Пробовал разные способы предоставления списка в качестве аргумента функции, но безрезультатно.
Подробнее здесь: https://stackoverflow.com/questions/786 ... tions-in-c