private static void ThrowIfPublisherAndSubscriberEventArgumentsMismatch(ISubscription subscription, IPublication publication)
{
Type publisherEventArgsType = publication.EventArgsType;
Type subscriberEventArgsType = subscription.EventArgsType;
// check that the T in EventHandler<T> is matching, the IsAssignableFrom method return false event if types can be assigned
// e.g. EventHandler<CustomEventArgs> is not assignable to EventHandler<EventArgs> when using IsAssignableFrom directly on event handler type
// therefore do the check on the event arguments type only.
// subscriberEventArgsType can be null if the handler method has no parameters.
if (subscriberEventArgsType != null && !subscriberEventArgsType.IsAssignableFrom(publisherEventArgsType))
{
using (var writer = new StringWriter(CultureInfo.InvariantCulture))
{
writer.Write("Publication ");
writer.WriteLine();
publication.DescribeTo(writer);
writer.WriteLine();
writer.Write("does not match with subscription ");
writer.WriteLine();
subscription.DescribeTo(writer);
throw new EventTopicException(writer.GetStringBuilder().ToString());
}
}
}