예제 #1
0
        public OptionMetadata[] Build(Type optionsType)
        {
            var metadata = optionsType
                           ?.GetProperties()
                           .Select(property => new
            {
                Property        = property,
                OptionAttribute = property.GetCustomAttribute <OptionAttribute>()
            })
                           .Where(aggregate => aggregate.OptionAttribute != null)
                           .Select(aggregate => new
            {
                Property        = aggregate.Property,
                OptionAttribute = aggregate.OptionAttribute,
                PossibleValues  = _valueMetadataBuilder.Build(aggregate.Property)
            })
                           .Select(aggregate =>
            {
                if (aggregate.PossibleValues == null)
                {
                    return(new OptionMetadata(
                               aggregate.OptionAttribute.Name,
                               aggregate.OptionAttribute.Description,
                               aggregate.Property));
                }
                else
                {
                    return(new OptionEnumMetadata(
                               aggregate.OptionAttribute.Name,
                               aggregate.OptionAttribute.Description,
                               aggregate.Property,
                               aggregate.PossibleValues));
                }
            })
                           .ToArray()
                           ?? Array.Empty <OptionMetadata>();

            return(metadata);
        }
예제 #2
0
        public ArgumentMetadata[] Build(Type argumentsType)
        {
            var metadata = argumentsType
                           ?.GetProperties()
                           .Select(property => new
            {
                Property          = property,
                ArgumentAttribute = property.GetCustomAttribute <ArgumentAttribute>()
            })
                           .Where(aggregate => aggregate.ArgumentAttribute != null)
                           .Select(aggregate => new
            {
                Property          = aggregate.Property,
                ArgumentAttribute = aggregate.ArgumentAttribute,
                PossibleValues    = _valueMetadataBuilder.Build(aggregate.Property)
            })
                           .Select(aggregate =>
            {
                if (aggregate.PossibleValues == null)
                {
                    return(new ArgumentMetadata(
                               aggregate.Property.Name,
                               aggregate.ArgumentAttribute.Description,
                               aggregate.Property.PropertyType.IsArray));
                }
                else
                {
                    return(new ArgumentEnumMetadata(
                               aggregate.Property.Name,
                               aggregate.ArgumentAttribute.Description,
                               aggregate.Property.PropertyType.IsArray,
                               aggregate.PossibleValues));
                }
            })
                           .ToArray()
                           ?? Array.Empty <ArgumentMetadata>();

            return(metadata);
        }