/// <summary>
        /// Called during cache miss in <see cref="dispositionTypesAccessRightsCache"/>.
        /// </summary>
        /// <param name="dispositionTypeCodeNames">The set of disposition type code names as the missed key.</param>
        /// <returns>Returns the combined access right.</returns>
        private AccessRight CombineAccessRightOfDispositionTypes(EquatableReadOnlyBag <string> dispositionTypeCodeNames)
        {
            if (dispositionTypeCodeNames == null)
            {
                throw new ArgumentNullException(nameof(dispositionTypeCodeNames));
            }

            var accessMapper = lazyAccessMapper.Value;

            return(CombineAccessRights(accessMapper.DispositionTypesAccessRightsByCodeName, dispositionTypeCodeNames));
        }
        /// <summary>
        /// Get the combined access right of a set of disposition types.
        /// </summary>
        /// <param name="dispositionTypes">The set of disposition types.</param>
        /// <returns>Returns the combined access right.</returns>
        public AccessRight GetAccessRightOfDispositionTypes(IEnumerable <DispositionType> dispositionTypes)
        {
            if (dispositionTypes == null)
            {
                throw new ArgumentNullException(nameof(dispositionTypes));
            }

            var dispositionTypeCodeNames = new EquatableReadOnlyBag <string>(dispositionTypes.Select(dt => dt.CodeName));

            return(dispositionTypesAccessRightsCache.Get(dispositionTypeCodeNames));
        }