Как реализовать пользовательский LogAttribute для класса - PullRequest
5 голосов
/ 17 марта 2012

Я хочу реализовать собственный LogAttribute, который будет регистрировать информацию в начале и в конце каждого метода в классе, а также должен регистрировать ошибки.Я хотел бы применить атрибут к классу.

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

Основным ключом является производительность, атрибут LogAttribute не должен влиять на производительность.

Я читал оIMessageSync, но это влияет на производительность.

В MVC мы получаем CustomFilters, в которых у нас может быть LogActionHandler, который будет выполняться в начале и в конце каждого метода Action.Я хотел бы реализовать подобное в веб-форме ASP.Net.

Может ли кто-нибудь помочь мне, предоставив пример кода.

1 Ответ

2 голосов
/ 11 сентября 2012

Unity - Microsoft IoC / Dependency Injection Container также позволяет перехват метода.

Вот пример «DiagnosticsInterceptor», который делает то же самое, что и вы: http://hmadrigal.wordpress.com/2010/12/25/aspect-oriented-programming-and-interceptor-design-pattern-with-unity-2/

Pro: это бесплатно

Con: Требуется шаблон Unity / DI / IoC. А вашему классу нужен интерфейс или виртуальный метод.

К сожалению, это НЕ верно для элементов управления ASP.NET. Так что этот метод будет работать только для вашего пользовательского класса: См. Перехватчик Unity 2.0 HandlerAttribute без интерфейса

...