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

AddPublication() public method

public AddPublication ( IPublication publication ) : void
publication IPublication
return void
        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));
        }