public void AddPublication(IPublication publication)
{
Ensure.ArgumentNotNull(publication, "publication");
this.Clean();
if (!publication.AllowsMultipleRegistrationsOnSamePublisher)
{
this.ThrowIfRepeatedPublication(publication.Publisher, publication.EventName);
}
this.extensionHost.ForEach(extension => extension.CreatedPublication(this, publication));
foreach (ISubscription subscription in this.subscriptions)
{
ThrowIfPublisherAndSubscriberEventArgumentsMismatch(subscription, publication);
ThrowIfSubscriptionHandlerDoesNotMatchHandlerRestrictionOfPublisher(subscription, publication);
}
lock (this)
{
var newPublications = new List<IPublication>(this.publications) { publication };
this.publications = newPublications;
}
this.extensionHost.ForEach(extension => extension.AddedPublication(this, publication));
}