AOP的另一選擇:Metalama

三年前有介紹一個台灣人寫的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));
}
}
參考資料