/// <summary>
        /// Finds best constructor, least parameter
        /// </summary>
        /// <param name="type">type</param>
        /// <param name="parameterTypes"></param>
        /// <returns>Matching constructor or default one</returns>
        public static ConstructorInfo?GetConstructor(this Type type, params Type[]?parameterTypes)
        {
            if (parameterTypes == null || parameterTypes.Length == 0)
            {
                return(GetEmptyConstructor(type));
            }

            ActivatorHelper.FindApplicableConstructor(type, parameterTypes, out var ctor, out _);
            return(ctor);
        }