我有一个接受Action<T>
Add(Action<T> action);
我可以很容易地打出这样的话:
Add((MyJob job) => job.Run());
但是我想通过反射动态加载作业,所以我可以使用类名“MyNamespace.MyJob”。我无法弄清楚如何用反射创建所需的参数。
P.S。该类实现了IJob,但遗憾的是我不能使用Action<IJob>
,因为hangfire将在稍后使用该参数从DI容器中解析。
答案 0 :(得分:3)
看起来Hangfire使用type参数来请求DI容器提供值。这就是代表实际上需要拥有正确类型的原因。使用Action<object>
无效。
static void AddToHangfire<T>() where T : ICommand {
Add((T job) => job.Run());
}
现在您需要使用反射来调用该方法。您可以使用MethodInfo.MakeGenericMethod
和MethodInfo.Invoke
来执行此操作。