public ProductDiscussionRequested(TenantId tenantId, ProductId productId, ProductOwnerId productOwnerId,
            string name, string description, bool requestingDiscussion)
        {
            this.TenantId = tenantId;
            this.ProductId = productId;
            this.ProductOwnerId = productOwnerId;
            this.Name = name;
            this.Description = description;
            this.RequestingDiscussion = requestingDiscussion;

            this.EventVersion = 1;
            this.OccurredOn = DateTime.Now;
        }
        public ProductCreated(TenantId tenantId, ProductId productId, ProductOwnerId productOwnerId, string name,
            string description, DiscussionAvailability availability)
        {
            this.TenantId = tenantId;
            this.ProductId = productId;
            this.ProductOwnerId = productOwnerId;
            this.Name = name;
            this.Description = description;
            this.Availability = availability;

            this.EventVersion = 1;
            this.OccurredOn = DateTime.Now;
        }
        public Product(TenantId tenantId, ProductId productId, ProductOwnerId productOwnerId, string name,
            string description, DiscussionAvailability discussionAvailability)
        {
            this.TenantId = tenantId;
            this.ProductId = productId;
            this.ProductOwnerId = productOwnerId;
            this.Name = name;
            this.Description = description;
            this.Discussion = ProductDiscussion.FromAvailability(discussionAvailability);
            this.DiscussionInitiationId = null;

            this._backlogItems = new HashSet<ProductBacklogItem>();

            DomainEventPublisher.Instance.Publish(new ProductCreated(this.TenantId, this.ProductId, this.ProductOwnerId,
                this.Name, this.Description, this.Discussion.Availability));
        }