2009-07-24 3 views
5

Можно создать дубликат:
Why does my .NET Attribute not perform an action?C# выполнение кода пользовательских атрибутов

Привет,

Это может soundlike очень тупой вопрос, и я не знаю, что можно здесь, как и все учебные пособия «custom attribute» в сети почти одинаковы, и они не учитывают то, что я хочу делать. Я видел какой-то код там, где код написан внутри классов атрибутов, например: Logging with ASP.NET MVC Action Filters, и мне интересно, как этот код выполняется.

Если у меня есть, например, следующий код:

public class Test 
{ 
    [RestrictedAttribute("RegisteredMember")] 
    public void DoSomething() 
    { 
     //this code can only be executed if the logged-in user 
     //is a member of the RegisteredMember group 
    } 
} 

Затем пользовательский атрибут RestrictedAttribute будет что-то вроде этого:

[AttributeUsage(AttributeTargets.Method)] 
public class RestrictedAttribute : System.Attribute 
{ 
    /// <summary> 
    /// Make this code restricted to users with a required role 
    /// </summary> 
    /// <param name="requiredRole">The role required to execute this method</param> 
    public RestrictedAttribute(string requiredRole) 
    { 
     //validate if member is in role, else throw exception 
     throw new MemberNotInRoleException(requiredRole); 
    } 
    public new string ToString() { 
     return "Access needs to be granted"; 
    } 

} 

Теперь проблема заключается в том, что я не могу получить MemberNotInRoleException быть брошенным при выполнении метода Test.DoSomething().

Возможно, мне просто не хватает всей концепции пользовательских атрибутов, не стесняйтесь объяснять.

+0

Dupe: http://stackoverflow.com/questions/1164978/c-attribute-actions-and-instance-values ​​ –

+2

Вам нужно наследовать свой атрибут из ActionFilterAttribute и переопределить метод OnActionExecuting, чтобы заставить его что-то сделать в MVC , –

+1

Я не думаю, что это точный обман, так как это поведение MCV, которое помутнение проблемы, ссылки на Mehrdad напрямую ссылаются на атрибуты, и это хороший вызов, но здесь есть нюанс, который может помочь людям MVC, проблемы в их решениях, такие как валидация и сериализация JSON/XML. –

ответ

2

То, как вы смотрите на атрибуты, звучит сначала, но подумайте еще раз. То, что вы на самом деле делаете, - это украсить ваш класс или что-то еще, чтобы что-то, что с ним работало, могло принять решение, а не просто, чтобы сам класс мог принять решение. Это было омрачено для меня тем, как вы можете использовать атрибуты actionfilter в MVC, которые выглядят так, как будто они что-то делают, но это структура, которая выбирает события и соответственно использует атрибут. Обычно я стараюсь думать об атрибутах как о комментариях к моей программе для работы.

Смежные вопросы