2010-03-25 8 views
5

यह वहाँ बाहर एक सा हो सकता है, लेकिन लगता है कि मैं बहुत की तरह, कुछ डिजाइन समय डेटा बनाने के लिए एक ViewModel में Moq उपयोग करना चाहते हैं:मिश्रण डिजाइन समय में Moq का उपयोग करना

public class SomeViewModel 
{ 
    public SomeViewModel(ISomeDependency dependency) 
    { 
     if (IsInDesignMode) 
     { 
     var mock = new Mock<ISomeDependency>(); 
     dependency = mock.Object; // this throws! 
     } 
    } 
} 

नकली स्थापित किया जा सकता है कुछ सामान करने के लिए, लेकिन आपको विचार मिलता है।

मेरे समस्या यह है कि मिश्रण में डिजाइन समय में, इस कोड को एक InvalidCastException फेंकता है, की तर्ज पर संदेश के साथ कि "प्रकार 'Castle.Proxies.ISomeDependencyProxy2b3a8f3188284ff0b1129bdf3d50d3fc' की वस्तु कास्ट करने के लिए 'ISomeDependency' टाइप करने में असमर्थ।" हालांकि यह आवश्यक रूप से मोक से संबंधित नहीं है लेकिन कैसल से संबंधित है, मुझे उम्मीद है कि एमओसी उदाहरण मदद करता है;)

कोई विचार क्यों है?

धन्यवाद!

उत्तर

1

मुझे एक समान समस्या है, सिवाय इसके कि कास्ट एक गतिशील रूप से जेनरेट की गई असेंबली (ब्लेंड_रंटिम जेनरेटेड टाइप्सएस्प्लर) प्रकार से आ रहा है जो मेरे प्रकारों में से एक के रूप में मास्कराइडिंग कर रहा है।

कोई स्पष्ट कारण नहीं है।

जो मुझे क्रॉजी चला रहा है।

+1

टाइप असेंबली ए के कारण क्लाइंट फैक्ट्री को लक्षित करने वाला पूर्ण ढांचा और डिज़ाइन टाइम डेटा प्रोजेक्ट बी लक्ष्यीकरण। होने के सभी प्रकार के अजीब बकवास के कारण। – Will

1

मुझे लगता था कि मुझे इस तरह की चाल करने की ज़रूरत है लेकिन बहुत प्रयोग और खोज के बाद, पता चला कि ब्लेंड 4 अब मौजूदा कक्षा के आधार पर डिज़ाइन टाइम नमूना डेटाकॉन्टेक्स बना सकता है।

यह प्रभावी रूप से आप एक डमी वर्ग कि सिर्फ अपने वी एम क्लास की तरह दिखता है, ताकि आप अपने आदि

यह काफी अच्छी तरह से है कि यह तकनीक अब हम अनुशंसा करते है काम करता है बंधन में जोड़ सकते हैं देता है।

इस के साथ एक संभावित नुकसान यह है कि यदि आपको कुछ वास्तविक इंटरैक्टिवता करने के लिए अपने वास्तविक वीएम की आवश्यकता है तो पाठ्यक्रम की प्रॉक्सी ऐसा नहीं कर सकती है - आपको मूल्यों को मैन्युअल रूप से बदलना होगा, या किसी अन्य डिज़ाइन टाइम ऑब्जेक्ट में स्वैप करना होगा । लेकिन व्यवहार में, मुझे शायद ही कभी इस परिदृश्य का सामना करना पड़ा है। अधिकांश समय, आप वीएम की स्थिति निर्धारित करते हैं और फिर उम्र को सही दिखने में लगते हैं।

1

अद्यतन: GitHub पर जारी किया गया: https://github.com/GeniusCode/GeniusCode.Components.DynamicDuck

मैं भी जब डिजाइन समय में नकली ViewModels के महल का उपयोग करने की कोशिश कर रहा एक ऐसी ही समस्या हुई थी। हमने अपना खुद का एमएसआईएल बतख/नकली पुस्तकालय लिखा है, और यह उस उद्देश्य के लिए अच्छा काम करता है।

मैं यहाँ यह के बारे में ब्लॉग: http://blogs.geniuscode.net/JeremiahRedekop/?p=255

हम MS-पी एल के तहत पुस्तकालय जारी करने और GitHub पर तैनात करने के लिए काम कर रहे हैं।