Appccelerate.EventBroker.Internals.EventTopic.ThrowIfPublisherAndSubscriberEventArgumentsMismatch C# (CSharp) Method

ThrowIfPublisherAndSubscriberEventArgumentsMismatch() private static method

private static ThrowIfPublisherAndSubscriberEventArgumentsMismatch ( ISubscription subscription, IPublication publication ) : void
subscription ISubscription
publication IPublication
return void
        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());
                }
            }
        }