/// <summary>
        /// Registers all causes, which may be combined and separated by semicolons (;) to
        /// the projection such that later matches will be dispatched to the projection.
        /// For example: string whenMatchingCauses = "User:new;User:contact;User:name";
        /// </summary>
        /// <param name="projection">The <see cref="IProjection"/> to which matches are dispatched</param>
        /// <param name="whenMatchingCauses">The array with one or more cause patterns separated by semicolons.</param>
        public void MayDispatchTo(IProjection projection, string[] whenMatchingCauses)
        {
            foreach (var whenMatchingCause in whenMatchingCauses)
            {
                var cause = Cause.DetermineFor(whenMatchingCause);

                if (!_mappedProjections.TryGetValue(cause, out var projections))
                {
                    projections = new List <IProjection>();
                    _mappedProjections.Add(cause, projections);
                }

                projections.Add(projection);
            }
        }