如何将动态类型的Action <t>传递给方法

时间:2016-03-31 12:21:17

标签: c# generics lambda delegates

我有一个接受Action<T>

的3d派对作业执行库(hangfire)
Add(Action<T> action);

我可以很容易地打出这样的话:

Add((MyJob job) => job.Run());

但是我想通过反射动态加载作业,所以我可以使用类名“MyNamespace.MyJob”。我无法弄清楚如何用反射创建所需的参数。

P.S。该类实现了IJob,但遗憾的是我不能使用Action<IJob>,因为hangfire将在稍后使用该参数从DI容器中解析。

1 个答案:

答案 0 :(得分:3)

看起来Hangfire使用type参数来请求DI容器提供值。这就是代表实际上需要拥有正确类型的原因。使用Action<object>无效。

static void AddToHangfire<T>() where T : ICommand {
 Add((T job) => job.Run());
}

现在您需要使用反射来调用该方法。您可以使用MethodInfo.MakeGenericMethodMethodInfo.Invoke来执行此操作。