private void ApplyParametersMetadata(ActionModel action)
    {
        object?[]? invokeArgs = null;
        var        parameters = action.ActionMethod.GetParameters();

        foreach (var parameter in parameters)
        {
            if (typeof(IEndpointParameterMetadataProvider).IsAssignableFrom(parameter.ParameterType))
            {
                for (var i = 0; i < action.Selectors.Count; i++)
                {
                    // Parameter type implements IEndpointParameterMetadataProvider
                    var context = new EndpointParameterMetadataContext(parameter, action.Selectors[i].EndpointMetadata, _serviceProvider);
                    invokeArgs ??= new object[1];
                    invokeArgs[0] = context;
                    PopulateMetadataForParameterMethod.MakeGenericMethod(parameter.ParameterType).Invoke(null, invokeArgs);
                }
            }

            if (typeof(IEndpointMetadataProvider).IsAssignableFrom(parameter.ParameterType))
            {
                for (var i = 0; i < action.Selectors.Count; i++)
                {
                    // Return type implements IEndpointMetadataProvider
                    var context = new EndpointMetadataContext(action.ActionMethod, action.Selectors[i].EndpointMetadata, _serviceProvider);
                    invokeArgs ??= new object[1];
                    invokeArgs[0] = context;
                    PopulateMetadataForEndpointMethod.MakeGenericMethod(parameter.ParameterType).Invoke(null, invokeArgs);
                }
            }
        }
    }
 private static void PopulateMetadataForParameter <T>(EndpointParameterMetadataContext parameterContext)
     where T : IEndpointParameterMetadataProvider
 {
     T.PopulateMetadata(parameterContext);
 }
 public static void PopulateMetadata(EndpointParameterMetadataContext parameterContext)
 {
     parameterContext.EndpointMetadata.Add(new ParameterNameMetadata {
         Name = parameterContext.Parameter.Name ?? string.Empty
     });
 }