Я пытаюсь вызвать EventAggregator Prism с помощью отражения, потому что полезная нагрузка события определяется во время выполнения.Недопустимый аргумент при вызове метода через отражение
Вот нормальный способ использовать EventAggregator:
[TestMethod]
public void WhenEventIsPublishedTheSubscriberReceivesIt()
{
var eventAggregator = new EventAggregator();
eventAggregator.GetEvent<PubSubEvent<string>>().Subscribe(Subscription);
eventAggregator.GetEvent<PubSubEvent<string>>().Publish(Constants.TestSymbol);
Assert.IsTrue(this.subscriptionReceived);
}
private void Subscription(string data)
{
this.subscriptionReceived = true;
}
Я делаю это:
var commandHandlerLocator = this.container.Resolve<ICommandHandlerLocator>();
var t = command.GetType();
dynamic commandHandler = commandHandlerLocator.GetType()
.GetMethod("GetCommandHandler")
.MakeGenericMethod(command.GetType()).Invoke(commandHandlerLocator, null);
IEnumerable<IEvent> events = commandHandler.Execute(command);
foreach (var @event in events)
{
var typedEvent = typeof(PubSubEvent<>).MakeGenericType(@event.GetType());
dynamic pubSubEvent = this.eventAggregator.GetType()
.GetMethod("GetEvent")
.MakeGenericMethod(typedEvent).Invoke(this.eventAggregator, null);
pubSubEvent.Publish(@event);
}
Выглядит хорошо для меня. Но когда я выполняю последнюю строку "(pubSubEvent.Publish (@event)", я получаю исключение, что метод Publish вызывается с недопустимыми аргументами. Любая идея, почему аргумент @event недействителен?
С уважением! .