Skip to content

Allow runtime attribute values via static methods #191

@ohadschn

Description

@ohadschn

Attribute values are limited to compile-time constant attribute parameter types. This can be limiting when values need to be evaluated at runtime. For example, I might want to take my help text or license from some file, or I might want a non-constant default value, or I might want dynamic options, etc.

One way around this would be a string pointer to a property/method which would supply the actual value:

class MyOptions
{
    [Option('f', "foo", HelpTextProperty = nameof(FooHelpText), Default = nameof(FooDefault))]
    public int Foo {get; set;}

    private string FooHelpText {get { return File.ReadAllText("foo.txt"); } }
    private int FooDefault {get { return Math.Pow(2,5); } }
}

Of course type validation would be performed (Default should have an assignable type to the property type, HelpTest should be a string, etc) for all such pointers (regardless of whether they are actually invoked, to fail fast in case of type inconsistency)

This is just one example, I believe this could be useful for many other attribute properties. To explicitly name the attributes currently defined in the library:

  • AssemblyLicenseAttribute (don't really understand the multiple line thing BTW, why not just pass the full string including newlines)
  • AssemblyUsageAttribute (same comment)
  • OptionAttribute
  • ValueAttribute
  • UsageAttribute
  • VerbAttribute

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions