2

私は、すべてのメソッドが次のように隣接しているいくつかのレガシーコードを継承しました。

Method()
{
   Log("Entering");
   ...
   Log("Exiting");
}

ある種のこと。それは醜く、確かに約千回自分自身を繰り返します。Railsにあるようなグローバルな「around_filter」を追加する方法はありますか?

4

2 に答える 2

1

もう1つのオプションは、Loggerクラスを設定することです。何かのようなもの:

public static class Logger
{
    public static void Invoke(Delegate del, params object[] args)
    {
        Console.WriteLine("Entering");
        del.DynamicInvoke(args);
        Console.WriteLine("Exiting");
    }

    public static T Invoke<T>(Delegate del, params object[] args)
    {
        Console.WriteLine("Entering");
        T rv = (T)del.DynamicInvoke(args);
        Console.WriteLine("Exiting");
        return rv;
    }
}

そして、あなたはそれをこのように使うことができます:

static void Main(string[] args)
{
    Logger.Invoke(new Action<int>(CountTo), 10);
    Console.WriteLine("5 * 2 = {0}", Logger.Invoke<int>(new Func<int, int>(TwiceAsBig), 5));
}

static void CountTo(int num)
{
    for (int i = 1; i <= num; ++i)
        Console.WriteLine(i);
}

static int TwiceAsBig(int num)
{
    return num * 2;
}
于 2012-05-31T01:11:40.987 に答える
1

これは、 PostSharpなどのアスペクト織りツールを介したアスペクト指向プログラミングで実行できます。PostSharpの場合、OnMethodBoundaryAspectはこのタイプの機能を提供します。

于 2012-05-31T00:22:04.960 に答える