private static void ThrowIfSubscriptionHandlerDoesNotMatchHandlerRestrictionOfPublisher(ISubscription subscription, IPublication publication) { if (publication.HandlerRestriction == HandlerRestriction.None) { return; } if ((int)subscription.Handler.Kind == (int)publication.HandlerRestriction) { return; } using (var writer = new StringWriter(CultureInfo.InvariantCulture)) { writer.Write("Publication "); writer.WriteLine(); publication.DescribeTo(writer); writer.WriteLine(); writer.Write("does not allow subscription "); writer.WriteLine(); subscription.DescribeTo(writer); writer.WriteLine(); writer.Write(" because publisher requires the subscription handler to be "); writer.Write(publication.HandlerRestriction); throw new EventTopicException(writer.GetStringBuilder().ToString()); } }
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()); } } }