三年前有介紹一個台灣人寫的AOP套件,可惜久沒維護,後來無意間發現國外另一個做meta-programing的套件,也有AOP功能,試了一下,也是跟PostSharp用法一樣,相當方便。

下面是簡單範例:

首先加入NuGet套件Metalama.Framework,接下撰寫下列程式碼,示範如何Log:

public class LoggingAttribute : OverrideMethodAspect
{
    public LoggingAttribute()
    {

    }

    public override dynamic? OverrideMethod()
    {
        Console.WriteLine($"Method {meta.Target.Method.Name} called.");
        return meta.Proceed();
    }
}

上面的示範只有將呼叫的Method輸出,實作上可以再套入NLog。

接下來就是把它套在Service Class的Method上就好:

public class TestService2 : IService
{
    [Logging]
    public void Exec()
    {
        Console.WriteLine($"aaa3 {nameof(Exec)}");
    }

    public void Exec2()
    {
        Console.WriteLine(nameof(Exec2));
    }
}

參考資料