オープン ソース プロジェクトであるNConcern .NET AOP Frameworkを参照してください。
例
あなたの静的クラス
static public class Calculator
{
static public int Add(int a, int b)
{
return a + b;
}
}
ロガー
static public class Logger
{
static public void Log(MethodInfo method, object[] arguments, Exception exception)
{
Console.WriteLine("{0}({1}) exception = {2}", method.Name, string.Join(", ", arguments), exception.Message);
}
}
アスペクト : ログオン例外
public class Logging : IAspect
{
public IEnumerable<IAdvice> Advise(MethodInfo method)
{
yield return Advice.Basic.After.Throwing((instance, arguments, exception) =>
{
Logger.Log(method, arguments, exception);
});
}
}
Joinpoint : 電卓のメソッド
var calculatorMethods = new Func<MethodInfo, bool>(method => method.ReflectedType == typeof(Calculator));
ジョインポイントのロギング アスペクトを有効にする
Aspect.Weave<Logging>(calculatorMethods);