Допустим, у меня есть:
public class ConcreteJob
{
public void ExecuteConcreteJob(string someParam) { }
}
Я привык выполнять его в планировщике Hangfire:
var client = new BackgroundJobClient();
client.Enqueue<ConcreteJob>(job => job.ExecuteConcreteJob("test_string_param"));
Теперь я хотел бы заменить конкретный тип ConcreteJob
его строкой Представительство "ConcreteJob"
. Используйте отражение и сделайте что-то вроде этого (очень просто сказано):
client.Enqueue<"ConcreteJob">(job => job.ExecuteConcreteJob("test_string_param"));
Я теряюсь во всех отражениях ...
Параметр Lambda как отличается от других потоки при переполнении стека.
То, что у меня есть:
var jobType = Type.GetType("ConcreteJob");
MethodInfo methodInfo = typeof(BackgroundJobClient).GetMethod("Enqueue").MakeGenericMethod(jobType);
var funcDelegateType = typeof(Func<>).MakeGenericType(jobType);
dynamic lambda = Expression.Lambda(funcDelegateType,
Expression.Call(
Expression.Parameter(jobType, "job"),
jobType.GetMethod("ExecuteCleanup"),
Expression.Constant(UserPrincipalName))
);
methodInfo.Invoke(client, new[] { (Action)(lambda) });