/// <summary>
 /// Adds a new convention applied to all controllers.
 /// </summary>
 /// <param name="convention">The <see cref="IControllerConvention">convention</see> to be applied.</param>
 public virtual void Add(IControllerConvention convention)
 {
     Arg.NotNull(convention, nameof(convention));
     ControllerConventions.Add(convention);
 }
 /// <summary>
 /// Adds a new convention applied to all controllers.
 /// </summary>
 /// <param name="convention">The <see cref="IControllerConvention">convention</see> to be applied.</param>
 public virtual void Add(IControllerConvention convention) => ControllerConventions.Add(convention);
        /// <summary>
        /// Adds the custom API versioning. With UrlSegment, Default Version Selector.
        /// </summary>
        /// <returns>The custom API versioning.</returns>
        /// <param name="services">Services.</param>
        /// <param name="convention">Convention.</param>
        /// https://github.com/Microsoft/aspnet-api-versioning/wiki/API-Version-Conventions
        public static IServiceCollection AddCustomApiVersioning(this IServiceCollection services, IControllerConvention convention = null)
        {
            services?.AddApiVersioning(options =>
            {
                options.ReportApiVersions = true;
                options.AssumeDefaultVersionWhenUnspecified = true;
                options.DefaultApiVersion  = new ApiVersion(1, 0);
                options.ApiVersionSelector = new CurrentImplementationApiVersionSelector(options);
                options.ApiVersionReader   = new UrlSegmentApiVersionReader();

                if (convention != null)
                {
                    options.Conventions.Add(convention);
                }
            });

            return(services);
        }