Example #1
0
    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);