protected void Argument( NameString name, Action <IArgumentDescriptor> argument) { if (argument is null) { throw new ArgumentNullException(nameof(argument)); } name.EnsureNotEmpty(nameof(name)); ParameterInfo?parameter = null; Parameters?.TryGetValue(name, out parameter); ArgumentDescriptor?descriptor = parameter is null ? Arguments.FirstOrDefault(t => t.Definition.Name.Equals(name)) : Arguments.FirstOrDefault(t => t.Definition.Parameter == parameter); if (descriptor is null && Definition.Arguments.Count > 0) { ArgumentDefinition?definition = parameter is null ? Definition.Arguments.FirstOrDefault(t => t.Name.Equals(name)) : Definition.Arguments.FirstOrDefault(t => t.Parameter == parameter); if (definition is not null) { descriptor = ArgumentDescriptor.From(Context, definition); } } if (descriptor is null) { descriptor = parameter is null ? ArgumentDescriptor.New(Context, name) : ArgumentDescriptor.New(Context, parameter); Arguments.Add(descriptor); } argument(descriptor); }
public static ArgumentDescriptor ToDescriptor( this ArgumentDefinition definition, IDescriptorContext context) => ArgumentDescriptor.From(context, definition);