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 }); }