1

アプリケーションが起動されるとき、特定のメソッドがいつ起動されるかを知る必要があります。属性と AOP テクニックを使用してこれを行う方法は?

最も簡単な方法は、次のようにイベント メソッドで時間を記録することです。

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

日時をデータベースに保存します。しかし、これを行うと、メソッドに多くの横断的な機能が残り、メンテナンス作業が難しくなるため、これは絶対に望ましくありません。この問題を解決するために属性を使用することを考えています。PostSharp は、メソッド呼び出しをインターセプトし、必要な前処理と後処理を実行できるため、ここでは良い候補のようです。しかし、明らかに欠けていることの 1 つは、大量のカスタム コードを書かないとイベントを処理できないことです。

イベントを自然に処理できるフレームワークはありますか?

4

3 に答える 3

2

Postsharpはおそらくここであなたを助けることができます

于 2008-12-22T09:55:18.933 に答える
1

Springフレームワークには、ロギングサポートを提供するアスペクト指向プログラミングモジュールがあります。

于 2008-12-22T09:41:32.207 に答える
1

このようにログに記録するイベントごとに個別のメソッドを用意する必要はありません。

ロギングを行う単一のメソッドを記述します。

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

次に、匿名メソッドを使用してイベントをサブスクライブします。

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

はい、宣言的ではなく命令的であり、イベント名を繰り返しますが、それでもかなりコンパクトです。リフレクションを使用してすべてのイベントにハンドラーをアタッチできますが、それはおそらくやり過ぎです。

于 2008-12-22T07:49:42.493 に答える