2016-01-28 105 views
1

我有多个属性我想应用在控制器上,我需要按顺序调用它们,因为如果第一个属性执行,我初始化下列属性将使用的变量。我的属性C#多个属性调用序列

[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个属性作为参数传递给第一个属性,但是如果我诚实地说我不喜欢这个想法或属性取决于对方。编辑。 HimBromBeere击败了我 – Matt

+1

如果MerchantLoggedIn始终需要AuthorizeLicense,那么您可以从AuthorizeLicense继承并使用one属性。 – Mant101

回答