/// <summary>
        /// Adds the given <paramref name="factory"/> to services.
        /// It will be used for configuring the <see cref="IranKishGatewayOptions"/>.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="factory"></param>
        /// <param name="serviceLifetime">Lifetime of <paramref name="factory"/>.</param>
        public static IGatewayConfigurationBuilder <IranKishGateway> WithOptionsProvider(
            this IGatewayConfigurationBuilder <IranKishGateway> builder,
            Func <IServiceProvider, IParbadOptionsProvider <IranKishGatewayOptions> > factory,
            ServiceLifetime serviceLifetime)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.WithOptionsProvider <IranKishGateway, IranKishGatewayOptions>(factory, serviceLifetime));
        }
        /// <summary>
        /// Adds the given <typeparamref name="TOptionsProvider"/> to services.
        /// It will be used for configuring the <see cref="IranKishGatewayOptions"/>.
        /// </summary>
        /// <typeparam name="TOptionsProvider"></typeparam>
        /// <param name="builder"></param>
        /// <param name="serviceLifetime">Lifetime of <typeparamref name="TOptionsProvider"/>.</param>
        public static IGatewayConfigurationBuilder <IranKishGateway> WithOptionsProvider <TOptionsProvider>(
            this IGatewayConfigurationBuilder <IranKishGateway> builder,
            ServiceLifetime serviceLifetime)
            where TOptionsProvider : class, IParbadOptionsProvider <IranKishGatewayOptions>
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.WithOptionsProvider <IranKishGateway, IranKishGatewayOptions, TOptionsProvider>(serviceLifetime));
        }