Whats the best approach for getting the attribute values from a classes methods and from the interface methods when the methods are overloaded?
For example I would want to know that in the following example the Get method with one parameter has the two attributes and the values are 5 and "any" while the other method has attributes with values 7 and "private".
public class ScopeAttribute : System.Attribute
{
    public string Allowed { get; set; }    
}
public class SizeAttribute : System.Attribute
{
    public int Max { get; set; }
}
public interface Interface1
{
    [SizeAttribute( Max = 5 )]
    string Get( string name );
    [SizeAttribute( Max = 7 )]
    string Get( string name, string area );
}
public class Class1 : Interface1
{
    [ScopeAttribute( Allowed = "any" )]
    public string Get( string name )
    {
        return string.Empty;
    }
    [ScopeAttribute( Allowed = "private" )]
    public string Get( string name, string area )
    {
        return string.Empty;
    }
}
                The only way I found was to check what interfaces the class implements and check attributes of the properties (if any exist) on those interfaces:
static bool HasAttribute (PropertyInfo property, string attribute) {
  if (property == null)
    return false;
  if (GetCustomAttributes ().Any (a => a.GetType ().Name == attribute))
    return true;
  var interfaces = property.DeclaringType.GetInterfaces ();
  for (int i = 0; i < interfaces.Length; i++)
    if (HasAttribute (interfaces[i].GetProperty (property.Name), attribute))
      return true;
  return false;
}
You can probably adopt it to methods equally easy.
Note: overall approach is tested but the code itself is ad-hoc and may not compile.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With