diff --git a/NzbDrone.Common/Messaging/MessageAggregator.cs b/NzbDrone.Common/Messaging/MessageAggregator.cs index 53965ffb5..825fe3b42 100644 --- a/NzbDrone.Common/Messaging/MessageAggregator.cs +++ b/NzbDrone.Common/Messaging/MessageAggregator.cs @@ -76,23 +76,18 @@ public void PublishCommand(TCommand command) where TCommand : class, I _logger.Trace("Publishing {0}", command.GetType().Name); - var handler = _serviceFactory.Build(handlerContract); + var handler = (IExecute)_serviceFactory.Build(handlerContract); _logger.Debug("{0} -> {1}", command.GetType().Name, handler.GetType().Name); try { - handlerContract.GetMethod("Execute").Invoke(handler, new object[] { command }); + handler.Execute(command); PublishEvent(new CommandCompletedEvent(command)); } - catch (TargetInvocationException e) + catch (Exception e) { PublishEvent(new CommandFailedEvent(command, e)); - - if (e.InnerException != null) - { - throw e.InnerException; - } throw; } finally @@ -108,9 +103,8 @@ public void PublishCommand(string commandTypeName) var commandType = _serviceFactory.GetImplementations(typeof(ICommand)) .Single(c => c.FullName.Equals(commandTypeName, StringComparison.InvariantCultureIgnoreCase)); - //json.net is better at creating objects - var command = Json.Deserialize("{}", commandType); - PublishCommand((ICommand)command); + dynamic command = Json.Deserialize("{}", commandType); + PublishCommand(command); } } }