किसी दिए गए वर्ग के लिए मैं ट्रेसिंग कार्यक्षमता रखना चाहूंगा अर्थात मैं हर विधि कॉल (विधि हस्ताक्षर और वास्तविक पैरामीटर मान) और हर विधि से बाहर निकलना चाहूंगा (बस विधि हस्ताक्षर)।
मैं यह मानकर कैसे पूरा करूं कि:
- मैं C # के लिए किसी भी 3 पार्टी AOP पुस्तकालयों का उपयोग नहीं करना चाहता,
- मैं उन सभी तरीकों से डुप्लिकेट कोड नहीं जोड़ना चाहता, जिन्हें मैं ट्रेस करना चाहता हूं,
- मैं कक्षा के सार्वजनिक API को बदलना नहीं चाहता - कक्षा के उपयोगकर्ता सभी तरीकों को एक ही तरीके से कॉल करने में सक्षम होना चाहिए।
प्रश्न को अधिक ठोस बनाने के लिए मान लें कि 3 वर्ग हैं:
public class Caller
{
public static void Call()
{
Traced traced = new Traced();
traced.Method1();
traced.Method2();
}
}
public class Traced
{
public void Method1(String name, Int32 value) { }
public void Method2(Object object) { }
}
public class Logger
{
public static void LogStart(MethodInfo method, Object[] parameterValues);
public static void LogEnd(MethodInfo method);
}
मैं कैसे आह्वान करते Logger.LogStart और Logger.LogEnd के लिए हर कॉल के लिए Method1 और Method2 को संशोधित किए बिना Caller.Call विधि और करने के लिए स्पष्ट रूप से कॉल जोड़े बिना Traced.Method1 और Traced.Method2 ?
संपादित करें: यदि मैं कॉल विधि को थोड़ा बदलने की अनुमति देता हूं तो क्या समाधान होगा?