Есть такой код: public class Foo { [Log("Calling bar")] public void Bar() { } } Как сделать, чтобы при вызове метода Bar что-то писалось в лог? Хотелось бы какое-нибудь событие типа OnCall
Ответ
Аспектно-ориентированное программирование
Ведение лога и обработка ошибок — типичные примеры сквозной функциональности.
PostSharp - одна из лучших библиотек АОП для c#
Вот пример аспекта:
public class LogAttribute : PostSharp.Aspects.OnMethodBoundaryAspect
{
// Выполняется перед входом в метод.
public override void OnEntry(MethodExecutionArgs args)
{
Console.WriteLine("Входим в метод {0} класса {1}", args.Method.Name, args.Method.DeclaringType.FullName);
}
// Выполняется при успешном завершении работы метода
public override void OnExit(MethodExecutionArgs args)
{
Console.WriteLine("Метод {0} класса {1} успешно отработал", args.Method.Name, args.Method.DeclaringType.FullName);
}
}
Быстрый старт
PostSharp. Решение задач логгирования и аудита
Несколько полезных аспектов для PostSharp
Комментариев нет:
Отправить комментарий