Добавление атрибута OnException с помощью PostSharp - PullRequest
4 голосов
/ 09 декабря 2008

Я вхожу в какой-то AOP, и похоже, что .NET PostSharp - это путь.

Я хочу сделать простую запись в базу данных при возникновении исключения. Однако мне трудно найти какие-либо реальные надежные примеры использования PostSharp помимо основ. Я попробовал следующее:

[Serializable]
public sealed class LogExceptionAttribute : ExceptionHandlerAspect
{
    public override void OnException(MethodExecutionEventArgs eventArgs)
    {
        //do some logging here
    }
}

И затем присоединение атрибута [LogException] к методу

Но я получаю ошибку компиляции:

Error   7   The type "CoDrivrBeta1.Classes.LogExceptionAttribute" or one of its ancestor should be decorated by an instance of MulticastAttributeUsageAttribute.    C:\work\CoDrivrBeta1\CoDrivrBeta1\EXEC  CoDrivrBeta1

Я должен признаться, что я новичок в этом, но это кажется интересной концепцией, я думаю, что мне просто нужно указать в правильном направлении

Ответы [ 2 ]

2 голосов
/ 09 декабря 2008

Я заставил его работать, расширив OnExceptionAspect:

[Serializable]
public sealed class LogExceptionAttribute : OnExceptionAspect
{
    public override void OnException(MethodExecutionEventArgs eventArgs)
    {
        //do some logging here
    }
}

Исходное сообщение:

Он хочет, чтобы вы добавили атрибут Multicast:

[Serializable]
[MulticastAttributeUsage(... Add Appropriate MulticastTargets ...)]
public sealed class LogExceptionAttribute : ExceptionHandlerAspect
{
    public override void OnException(MethodExecutionEventArgs eventArgs)
    {
        //do some logging here
    }
}

Смотрите эту ссылку для более подробной информации: http://doc.postsharp.org/1.0/UserGuide/Laos/Multicasting/Overview.html

0 голосов
/ 09 декабря 2008

Я использовал OnMethodBoundaryAspect вместо ExceptionHandlerAspect без проблем. И я тоже не сделал запечатанным.

...