Захват событий для целей регистрации - PullRequest
1 голос
/ 22 декабря 2008

Когда приложение запускается, мне нужно знать для определенных методов, когда они запускаются. Как это сделать, используя атрибуты и методы АОП?

Самый простой способ - записать время в методе события, например:

private void Page_load()
{
  DateTime dt = DateTime.Now;
}

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

Существует ли какая-либо инфраструктура, которая может обрабатывать события естественным образом?

Ответы [ 3 ]

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

Postsharp , вероятно, может помочь вам здесь

1 голос
/ 22 декабря 2008

Фреймворк Spring имеет модуль аспектно-ориентированного программирования, обеспечивающий поддержку ведения журнала.

1 голос
/ 22 декабря 2008

Вам не нужно иметь отдельный метод для каждого события, которое вы хотите регистрировать таким образом.

Напишите один метод для ведения журнала:

public static void LogEventRaised(string event)
{
    ...
}

затем подпишитесь на события, используя анонимный метод:

Load += delegate { LogEventRaised("Load") };

Да, это обязательно, а не декларативно, и повторяет название события - но все равно довольно компактно. Вы могли бы прикрепить обработчики к всем событиям, используя отражение, но это, вероятно, было бы излишним.

...