2016-01-28 2 views
1

У меня есть несколько атрибутов, которые я хочу применить на контроллере. Мне нужно вызвать их в порядке последовательности, потому что если первые Атрибуты выполняются, я инициализирую переменные, которые будет использовать следующий атрибут.C# multiple Attributes Calling Sequence

[AuthorizeLicense] 
[MerchantLoggedIn] 
[MerchantAuthorize] 
public class MerchantController : BaseController 
{ 
} 

Определение моих атрибутов

public class AuthorizeLicense:AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 

     if(somecondition is true){ 
    //initialize variables for next attribute use; 
     } 

    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 


    } 


} 

Следующая Атрибут

public class MerchantLoggedIn:AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 

      //use initialize variables from previous attribute 


    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 


    } 


} 

Проблема я столкнулся в том, что атрибуты не вызываются в последовательности, как я определил их в классе ; то есть сверху вниз. Пожалуйста, помогите .. что я делаю неправильно.

+5

Похоже разбитого дизайн для меня, если атрибут работает только тогда, когда другой также установлен, то вы можете инкапсулировать его в последний в любом путь. Что вы делаете, если какой-либо разработчик предоставляет только один атрибут? – HimBromBeere

+2

Просто подумайте вслух, но вы можете передать другие 2 атрибута в первый как параметры, но если Im честный, мне не нравится идея или атрибуты, зависящие друг от друга. Редактировать. HimBromBeere избил меня до этого – Matt

+1

Если MerchantLoggedIn всегда нуждается в AuthorizeLicense, вы можете наследовать от AuthorizeLicense и просто использовать один атрибут. – Mant101

ответ