1

Hangfire はバックグラウンド クラス メソッド ランナーであり、繰り返しジョブ関数です。 RecurringJob.AddOrUpdate(Expression< Action >,string) は、メソッドをキューに追加するために使用されるメソッドです。最初のパラメータはアクション コールで、2 番目のパラメータは 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。

文字列定義を介してジョブを追加するにはどうすればよいですか、または上のサンプルに示されているオブジェクトのインスタンス化とメソッド running(new MyClass().Run()) を可能にする文字列から Expression < Action > を作成するにはどうすればよいでしょうか?

4

1 に答える 1

2

以下は仕事をするでしょう

// ... (same as yours except the last 2 lines)
var myAction = Expression.Lambda<Action>(Expression.Call(Expression.New(myType), myMethod));
RecurringJob.AddOrUpdate(myAction, myCronString);
于 2015-10-29T14:05:45.293 に答える