私は C# である種のアスペクト指向プログラミングを実装しようとしていますが、いくつかの小さな成功はありましたが、いくつかの重要な制限が見つかりました。
これらの制限の 1 つは、静的メソッドへの呼び出しをインターセプトする機能です。たとえば、次のオブジェクトがあるとします。
public class SampleObject
{
public SampleObjectProperty { get; set; }
public SampleObject(int anInteger) { this.SampleObjectProperty = anInteger; }
public int SampleObjectMethod(int aValue)
{
return aValue + this.SampleObjectProperty;
}
public static string GetPI() { return Math.PI.ToString(); }
}
呼び出し元は次のようになります。
[Intercept]
public class Caller : ContextBoundObject
{
static void Main(string[] args)
{
SampleObject so = new SampleObject(1); // Intercepted successfully.
so.SampleObjectProperty; // Idem.
so.SampleObjectProperty = 2; // Idem.
so.SampleObjectMethod(2); // Idem.
// The next call (invocation) executes perfectly, but is not intercepted.
SampleObject.GetPI(); // NOT INTERCEPTED :(
}
}
私が持っているコードでは、コンストラクター、インスタンス メソッド、およびプロパティ (get および set) をインターセプトできますが、静的メソッドはインターセプトできません。
静的メソッド呼び出しをキャプチャする方法について何か提案やアイデアはありますか?