private static IConfigurable CreateGenerator <IdType>(IdGeneratorParams parameters)
        {
            switch (parameters.Strategy)
            {
            case IdGeneratorStrategy.TableHiLow:
            {
                TableHiLoGenerator generator = CreateTableHiLoGenerator((TableIdGeneratorParams)parameters);
                return(new IdGeneratorNHibernateAdaptor <IdType>(generator));
            }

            case IdGeneratorStrategy.MinimalGap:
            {
                return(CreateMinimalGapTableIdGenerator((TableIdGeneratorParams)parameters));
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        /// <summary>
        /// Create the desired <see cref="INHibernateIdGenerator{T}"/> as determined by the <see cref="IdGeneratorParams"/>
        /// </summary>
        /// <remarks>
        /// To create a table backed id generator, you need to supply as the <paramref name="parameters"/>,
        /// an instance of the <see cref="TableIdGeneratorParams"/> class
        /// </remarks>
        /// <typeparam name="IdType">The type of the id that is to be generate</typeparam>
        /// <param name="parameters">Values that select and configure the a desired <see cref="INHibernateIdGenerator{T}"/></param>
        public virtual INHibernateIdGenerator <IdType> Create <IdType>(IdGeneratorParams parameters)
        {
            IConfigurable generator = CreateGenerator <IdType>(parameters);

            return((INHibernateIdGenerator <IdType>)generator);
        }