C # Атрибуты, которые выясняют, применяется ли другой атрибут - PullRequest
0 голосов
/ 25 сентября 2010

Я работаю над проектом Asp.net MVC, и мне интересно, есть ли способ для атрибутов общаться с другими атрибутами.

Например, у меня есть следующие атрибуты

public class SuperLoggerAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        //Do something super
    }
}

public class NormalLoggerAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        //Do something normal ONLY if the super attribute isn't applied 
    }
}

И у меня есть следующие контроллеры

[NormalLogger]
public class NormalBaseController : Controller
{

}

public class PersonController: NormalBaseController
{

}

[SuperLogger]
public class SuperController: NormalBaseControler
{

}

Итак, я хочу, чтобы мой SuperController использовал SuperLogger и игнорировал NormalLogger (который применялся в базе), а PersonController должен использовать NormalLogger, поскольку"переопределено" SuperLogger.Есть ли способ сделать это?

Спасибо,

Чи

Ответы [ 2 ]

1 голос
/ 25 сентября 2010

Почему бы просто не иметь SuperLoggerAttribute наследовать от NormalLoggerAttribute и переопределить метод Log?

0 голосов
/ 25 сентября 2010

Я думаю, что это должно работать:

public enum LoggerTypes
{
    Normal,
    Super
}

public class LoggerAttribute : ActionFilterAttribute
{
    public LoggerAttribute() : base()
    {
        LoggerType = LoggerTypes.Normal;
    }

    public LoggerAttribute(LoggerTypes loggerType) : base()
    {
        LoggerType = loggerType;
    }

    public LoggerTypes LoggerType
    {
        get; 
        set;
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (LoggerType == LoggerTypes.Super)
        {
            //
        }
        else
        {
            //
        }
    }

Использование:

[Logger(LoggerTypes.Normal)]

или

[Logger(LoggerTypes.Super)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...