Я работаю, чтобы иметь настраиваемую асинхронную обработку домена событий, когда
Я попытался создать делегат для Task HandleEvent(TEvent @event)
метода, который отвечает за асинхронное выполнение событий, если тип возвращаемого значения - Task, у меня есть исключение
System.ArgumentException: «Невозможно выполнить привязку к целевому методу, поскольку
его подпись или прозрачность безопасности не совместимы с
тип делегата. '
public IDisposable RegisterHandler(object handler)
{
Contract.Requires(handler != null);
var interfaceType = handler.GetType().GetTypeInfo().GetInterfaces()
.SingleOrDefault(t => t.GetGenericTypeDefinition() == typeof(IEventHandler<>));
if (interfaceType == null)
{
throw new ArgumentException(string.Format("Supplied parameter does not implement {0} interface.", nameof(IEventHandler<object>)));
}
var eventType = interfaceType.GenericTypeArguments[0];
var stream = this.eventStreams[eventType];
var streamType = stream.GetType();
if (this.eventStreams == null)
{
throw new KeyNotFoundException(string.Format("Event stream for '{0}' was not found.", eventType.Name));
}
var handleEvent = handler.GetType().GetTypeInfo().GetMethod(nameof(IEventHandler<object>.HandleEvent));
var actionType = typeof(Action<>).MakeGenericType(eventType);
var del = handleEvent.CreateDelegate(actionType, handler);
var method = streamType.GetTypeInfo().GetMethods().First(
t =>
t.Name == nameof(IEventStream<object>.Subscribe) &&
t.GetParameters().FirstOrDefault()?.ParameterType.GetGenericTypeDefinition() == typeof(Action<>));
return (IDisposable)method.Invoke(stream, new object[] { del });
}
Как я могу создать делегата для соответствующего метода?