views:

82

answers:

2

particularly when overriding Asp.net MVC ValidationAttribute, is it possible to know class name which has field marked with attribute ? (AttributeUsage is AttributeTargets.Property)

public class UniqueAttribute: ValidationAttribute

        public override bool IsValid(object value)
        {
            // how to know which class has this attribute?
        }
+1  A: 

Given an instance of an attribute it is not possible to determine what class, field, method, etc ... originated this attribute. Primarily because it doesn't need to be attached to one. All attributes can be created just like a normal object and hence not be attached to anything

var instance = new UniqueAttribute();

You may need to use a different constructor but one must exist or it couldn't be applied to a member in the first place.

It is possible to go the other way though. Given a member or type to find out if it has a given attribute applied to it. For example, assuming there is a single instance of UnqiueAttribute attached to the type SomeType this code will retrieve it.

var type = typeof(SomeType);
var attrib = (UniqueAtrtibute)type.GetCustomAttributes(typeof(UnqiueAttribute),true)[0];
JaredPar