public BacklogItemDiscussion NowReady(DiscussionDescriptor descriptor)
 {
     if(descriptor==null || descriptor.IsUndefined) {
         throw new InvalidOperationException("The discussion descriptor must be defined.");
     }
     if(this.Availability!=DiscussionAvailability.Requested) {
         throw new InvalidOperationException("The discussion must be requested first.");
     }
     return new BacklogItemDiscussion(descriptor, DiscussionAvailability.Ready);
 }
        public static ProductDiscussion FromAvailability(DiscussionAvailability availability)
        {
            if(availability==DiscussionAvailability.Ready) {
                throw new InvalidOperationException("Cannot be created ready.");
            }

            DiscussionDescriptor descriptor = new DiscussionDescriptor(DiscussionDescriptor.UndefinedId);

            return new ProductDiscussion(descriptor, availability);
        }
        public void InitiateDiscussion(DiscussionDescriptor descriptor)
        {
            if(descriptor == null) {
                throw new InvalidOperationException("The descriptor must not be null.");
            }
            if(this.Discussion.Availability==DiscussionAvailability.Requested) {
                this.Discussion = this.Discussion.NowReady(descriptor);

                DomainEventPublisher.Instance.Publish(new ProductDiscussionInitiated(this.TenantId, this.ProductId,
                    this.Discussion));
            }
        }
 public void InitiateDiscussion(DiscussionDescriptor descriptor)
 {
     AssertionConcern.NotNull(descriptor, "The descriptor must not be null.");
     if(this.Discussion.Availability==DiscussionAvailability.Requested) {
         this.Discussion = this.Discussion.NowReady(descriptor);
         DomainEventPublisher.Instance.Publish(new BacklogItemDiscussionInitiated(this.TenantId,
             this.BacklogItemId, this.Discussion));
     }
 }
 public BacklogItemDiscussion(DiscussionDescriptor descriptor, DiscussionAvailability availability)
 {
     this.Descriptor = descriptor;
     this.Availability = availability;
 }
 public ProductDiscussion(DiscussionDescriptor descriptor, DiscussionAvailability availability)
 {
     AssertionConcern.NotNull(descriptor, "The descriptor must be provided.");
     this.Descriptor = descriptor;
     this.Availability = availability;
 }
 public DiscussionDescriptor(DiscussionDescriptor discussionDescriptor)
     : this(discussionDescriptor.Id)
 {
 }