Hangfire — это средство запуска методов фонового класса, а его повторяющаяся функция задания RecurringJob.AddOrUpdate(Expression‹ Action >,string) — это метод, используемый для добавления методов в очередь. Первый параметр — это вызов Action, а второй — строка в формате cron.
Если у меня есть строки имени класса и функции, как я могу добавить задание.
Пример обычного нестрокового вызова:
RecurringJob.AddOrUpdate(() => new MyClass().MyMethod(), "0 0 * * *");
Я хотел бы сделать что-то вроде
string myClassString = GetMyClassFromConfig();//value "MyNamespace.MyClass";
string myMethodString = GetMyMethodFromConfig();//value "MyMethod";
string myCronString = GetMyCronFromConfig();// value "0 0 * * *"
Type myType = Type.GetType(myClassString);
var myMethod = myType.GetMethod(myMethodString);
var myInstance = Expression.Parameter(myType,"instanceName");
RecurringJob.AddOrUpdate(Expression.Call(myInstance,myMethod), myCronString);
но это вызывает ошибку при вызове метода AddOrUpdate:
Не удалось создать экземпляр типа System.Linq.Expressions.Expression. Тип является интерфейсом или абстрактным классом и не может быть создан. Путь «Тип», строка 1, позиция 8.
Как мне добавить задания через определения строк или как сделать выражение ‹ действие > из строк, которые позволили бы создавать экземпляр объекта и запускать метод (new MyClass().Run()), показанный в верхнем примере?
Action
будет похожа на запуск динамического кода, что, вероятно, невозможно в С# stackoverflow.com/questions/4629/ - person DLeh   schedule 29.10.2015DataBinder.Eval
может сделать это из коробки. - person Scott Chamberlain   schedule 29.10.2015