0
C RecurringJob AddOrUpdate反射コールは、私は反射コールに、このメソッドを書き換える必要があることhangfire、#
public override string StartWork()
{
RecurringJob.AddOrUpdate<SomeScenario>(jobEntity.Name, x => x.Execute(jobEntity.Name), cron, TimeZoneInfo.Utc);
}
ようRecurringJobからAddOrUpdateメソッドを呼び出します。 私はDBに適切な型を持ち、私はだから
Type type = Type.GetType(jobEntity.ScenarioType);
MethodInfo generic = addOrUpdate.MakeGenericMethod(type);
のようにそれを得るだろう、今私はprooperパラメータを使用してこのメソッドを呼び出す必要があります。適切なメソッドオーバーロード
MethodInfo addOrUpdate = typeof(RecurringJob).GetMethods().Where(x => x.Name == "AddOrUpdate" && x.IsGenericMethod && x.IsGenericMethodDefinition).Select(m => new
{
Method = m,
Params = m.GetParameters(),
Args = m.GetGenericArguments()
})
.Where(x => x.Params.Length == 5
&& x.Params[0].ParameterType == typeof(string)
&& x.Params[2].ParameterType == typeof(string)
&& x.Params[3].ParameterType == typeof(TimeZoneInfo)
&& x.Params[4].ParameterType == typeof(string)
)
.Select(x => x.Method).FirstOrDefault();
を見つけました
public static void AddOrUpdate<T>(string recurringJobId, Expression<Action<T>> methodCall, string cronExpression, TimeZoneInfo timeZone = null, string queue = "default")
問題:私はgeneric.Invoke(this, new object[] { jobEntity.Name, Expression<Action<T>>, cron, TimeZoneInfo.Utc, null });
は、任意の助けのために、あなたに多くのことを感謝呼び出すために、この場合にはExpression<Action<T>>
を生成する方法がわかりません。