2011-08-21 9 views
5

मैं किसी ऐसे अनुबंध पर काम कर रहा हूं जिसे एक अनुबंध (इंटरफ़ेस के रूप में निर्दिष्ट) में लेने की आवश्यकता है, और इस इंटरफेस को पूरा करने वाले किसी औपचारिक रूप से परिभाषित ठोस वर्ग के बिना फ्लाई पर एक उदाहरण बनाएं।रनटाइम के दौरान इंटरफेस से ठोस प्रकार उत्पन्न करने के लिए ओपन सोर्स लाइब्रेरी?

वाक्य रचना का एक उदाहरण इस तरह है:

IExampleMessage message = MessageBuilder.Create<IExampleMessage>(x => { 
    x.PropertyA = "Test"; 
    x.PropertyB = 5; 
}); 

मैंने देखा है अन्य नेट पुस्तकालयों और चौखटे (NServiceBus मन में आता है) इस तरह व्यवहार प्रस्तुत करते हैं, और अगर वहाँ एक मैं सोच रहा हूँ तृतीय पक्ष लाइब्रेरी जो रनटाइम कोड जेन को दूर करता है। मैंने सोचा कि कैसल डायनैमिक प्रॉक्सी देखने के लिए एक जगह होगी, लेकिन यह पूरी तरह से प्रॉक्सीइंग और अवरोध पर केंद्रित है, और कोड जनरेशन पहलू का खुलासा नहीं कर रहा है।

मैं एक कार्यान्वयन लिख सकता हूं जो प्रतिबिंब का उपयोग करता है। फ्लाई पर कक्षा बनाने के लिए प्रवेश करें, हालांकि अगर कोई मौजूद है तो मैं एक ठोस ओपन सोर्स लाइब्रेरी का उपयोग करूंगा।

कोई सुझाव?

+0

मैं उत्सुक हूं: विधियों के साथ इंटरफेस कैसे समर्थित होंगे? आप उस वाक्यविन्यास के साथ किसी विधि के कस्टम कार्यान्वयन को निर्दिष्ट करने का इरादा कैसे रखते हैं? –

+0

विधियों के साथ इंटरफेस समर्थित नहीं हैं –

+0

मैंने BLTookit – adontz

उत्तर

1

मॉकिंग लाइब्रेरीज़ - एनएमॉक, और राइनोमोक्स के बारे में क्या?

आप स्टब्स/अपेक्षाओं का उपयोग करके ठोस प्रकारों में कार्यान्वयन भी जोड़ सकते हैं।

विशेष रूप से राइनो में आपकी पसंद की चीज़ के लिए एक अच्छा लैम्ब्डा आधारित वाक्यविन्यास है।

क्या यह आपकी आवश्यकताओं को पूरा नहीं करता है?

ऐसा कुछ?

IExampleMessage message = MockRepository.GenerateStub<IExampleMessage>(); 
message .Stub(x => x.PropertyA).Return("Text")  
message .Stub(x => x.PropertyB).Return(5) 
2

आशु इंटरफ़ेस तुम क्या जरूरत है: - http://code.google.com/p/impromptu-interface/

मैं इसे का उपयोग किया है polymorphic types in .NET बनाने के लिए।

आप Clay पर भी देख सकते हैं।

+0

में समान कोड देखा था, मैं गतिशील से दूर रहने की कोशिश कर रहा था। हालांकि वह सामान बहुत अच्छा है। –

+1

@ जोनाथन-हॉलैंड उपयोग-मामले में आप वर्णन कर रहे हैं, आपको वास्तव में इम्प्रोप्टू का उपयोग करते समय अपने कोड में गतिशीलता के किसी भी उपयोग को देखने की आवश्यकता नहीं होगी (हालांकि यह दृश्यों के पीछे हो रहा है)। उदाहरण कार्यान्वयन: 'सार्वजनिक टी (एक्शन init) बनाएं जहां टी: कक्षा {var message = new ExpandoObject()। ActLike (); init (संदेश); वापसी संदेश;} ' – jbtule

संबंधित मुद्दे