क्या dynamic
विधि कॉल (विशेष रूप से वे RuntimeBinderException
एस बढ़ाने के लिए जा रहे हैं) RealProxy
के साथ किसी को भी अवरुद्ध करने के तरीके से जानते हैं? मैं अपवाद को पकड़ने और उसके ऊपर 'विधि अनुपलब्ध' को लागू करने की उम्मीद कर रहा था, लेकिन ऐसा लगता है कि इंटरसेप्टर को देखने में सक्षम होने से पहले इसे फेंक दिया जाता है।सी # 4.0 में विधि-गायब कठिनाइयों: गतिशील बनाम रियलप्रोक्सी
मेरा परीक्षण बस लगता है कि:
dynamic hello = MethodMissingInterceptor<DynamicObject>.Create();
Assert.AreEqual("World", hello.World());
कहाँ World
वास्तव में DynamicObject
पर लागू नहीं है। इंटरसेप्टर बिल्कुल स्पष्ट है - मैं RuntimeBinderException
के लिए IMethodReturnMessage.Exception
की जाँच करें और की तरह कुछ करने के लिए पर अग्रेषित करने के लिए उम्मीद कर रहा था:
public IMessage MethodMissing(IMethodCallMessage call)
{
return new ReturnMessage(call.MethodBase.Name, new object[0], 0, call.LogicalCallContext, call);
}
दुर्भाग्य से, सब मैं अपने इंटरसेप्टर में देखते हैं GetType
करने के लिए कुछ कॉल, और नहीं गैर existant World
तरीका है ।
विफल होने पर - क्या किसी को पता है कि DynamicProxy
संस्करण .NET 4.0 पर खुशी से चल रहा है, फिर भी समस्या का सामना करना पड़ सकता है?
उत्कृष्ट स्पष्टीकरण के लिए धन्यवाद, क्रिस - मैंने अभी आपके ब्लॉग पर सी # गतिशील 'पोस्ट की श्रृंखला शुरू कर दी है। :) मेरे उद्देश्यों के लिए, आपका पहला समाधान ऐसा लगता है जैसे इसे काम करना चाहिए। मैं केवल इन कॉलरों को बिल्डर-स्टाइल ऑब्जेक्ट्स के लिए बनाना चाहता हूं और परीक्षण एपीआई में कुछ अतिरिक्त प्रवाह के लिए, मुझे उन्हें मनमानी वस्तुओं पर पकड़ने की आवश्यकता नहीं है। – Thom
@ क्रिस - नोट भी "बस मामले में" ऊपर सवाल है; असल में, मुझे यह जानना अच्छा लगेगा ;-p –
क्या वास्तव में इसे कॉल किए बिना किसी सदस्य की उपस्थिति के लिए डायनामिक ऑब्जेक्ट से पूछने का कोई तरीका है? –