बनाना मैं गतिशील रूप से प्रॉक्सी क्लास बनाने की कोशिश कर रहा हूं। मुझे पता है कि ऐसा करने के लिए वहां कुछ बहुत अच्छे ढांचे हैं लेकिन यह एक सीखने का अभ्यास के रूप में पूरी तरह से एक पालतू परियोजना है, इसलिए इसे स्वयं करना चाहूंगा।गतिशील रूप से प्रॉक्सी क्लास
, उदाहरण के लिए, मैं निम्नलिखित वर्ग एक अंतरफलक को लागू करने के लिए है:
interface IMyInterface
{
void MyProcedure();
}
class MyClass : IMyInterface
{
void MyProcedure()
{
Console.WriteLine("Hello World");
}
}
ताकि उन्हें लॉग इन करने में इस वर्ग के तरीकों को बीच में रोकने के लिए, मैं किसी अन्य वर्ग बनाने रहा हूँ (एक प्रॉक्सी वर्ग की मेरी संस्करण) जो एक ही इंटरफेस लागू करता है लेकिन 'वास्तविक' वर्ग का संदर्भ होता है। यह वर्ग एक क्रिया (उदा। लॉगिंग) करता है और फिर वास्तविक विधि पर एक ही विधि को कॉल करता है।
उदाहरण के लिए:
class ProxyClass : IMyInterface
{
private IMyInterface RealClass { get; set; }
void MyProcedure()
{
// Log the call
Console.WriteLine("Logging..");
// Call the 'real' method
RealClass.MyProcedure();
}
}
फोन करने वाले तो प्रॉक्सी वर्ग पर सभी तरीकों (मैं एक बुनियादी घर काढ़ा आईओसी कंटेनर का उपयोग कर रहा वास्तविक वर्ग के स्थान पर प्रॉक्सी वर्ग सुई) कॉल के बजाय। मैं इस विधि का उपयोग कर रहा हूं क्योंकि मैं एक ही इंटरफेस को लागू करने वाले दूसरे वर्ग में रन टाइम पर RealClass
को स्वैप करने में सक्षम होना चाहता हूं।
रन समय पर ProxyClass
बनाने का कोई तरीका है और इसकी RealClass
संपत्ति को पॉप्युलेट करें ताकि इसे वास्तविक कक्षा के लिए प्रॉक्सी के रूप में उपयोग किया जा सके? क्या ऐसा करने का कोई आसान तरीका है या मुझे Reflection.Emit
जैसे कुछ उपयोग करने की आवश्यकता है और एमएसआईएल उत्पन्न करें?
गतिशील रूप से उत्पन्न करने का क्या मतलब है? क्या आपका मतलब है कि आपके पास एक टाइप ऑब्जेक्ट है और इस प्रकार की ऑब्जेक्ट को तुरंत चालू करना चाहते हैं? – JJ15k
हां। मैं IMYInterface से रनटाइम पर प्रॉक्सी क्लास का एक उदाहरण बनाना चाहता हूं, एक वास्तविक वर्ग के संदर्भ में अपनी 'रियल क्लास' संपत्ति को पॉप्युलेट करें ताकि इसका उपयोग वास्तविक वर्ग में सभी कॉल को अवरुद्ध करने के लिए किया जा सके। मैं आपको धन्यवाद देने के लिए प्रश्न संपादित करूंगा। –
कैसल की डायनामिक प्रॉक्सी देखें http://www.castleproject.org/projects/dynamicproxy/ –