2012-05-09 30 views
13

मैं वर्कफ़्लो बनाने के लिए आरएक्स एक्सटेंशन और WF4 का उपयोग कर रहा हूं जो वर्कफ़्लो को प्रगति के लिए देखने योग्य संदेशों पर प्रतिक्रिया करता है। ऐसा करने के लिए, मैं एक ऑब्जेक्ट लाता हूं जिसमें एक IObservable (मॉड्यूल मैसेज मेरा सार वर्ग है।) मेरी समस्या यह है कि। सदस्यता सदस्यता में से किसी भी विस्तार विधियों को पहचानने में विफल रहता है, अर्थात् लैम्ब्डा एक्सप्रेशन/विधि समूहों के लिए।IObservable <> गायब। सदस्यता विधियों की सदस्यता

using System.Activities; 
using System.Activities.Hosting; 
using System.Collections.Generic; 
using System.Reactive.Linq; 

और यह भी निम्न कोड पंक्ति:

internal void AddModuleCallback(IModule module) 
    { 
     if (!addedCallback) 
     { 
      addedCallback = true; 
      module.Messages.Where(m => m is MemberLeftModuleMessage || m is MemberRemovedModuleMessage).Subscribe(m => this.OnMemberExit(m)); // This line errors 
     } 
    } 

    internal void OnMemberExit(ModuleMessage message) 
    { 
     // Gizmo was fired, resume the bookmark 
     this.instance.BeginResumeBookmark(
      new Bookmark(ModuleVisit.BookmarkName), 
      message is MemberLeftModuleMessage, 
      r => this.instance.EndResumeBookmark(r), 
      null); 
    } 
का संकलन समय त्रुटि के साथ

:

Error 1 Cannot convert lambda expression to type 'System.IObserver<Components.Messages.ModuleMessage>' because it is not a delegate type <Removed>\WaitForModuleVisitExtension.cs 34 119 Components 

कृपया ध्यान दें, इस निम्न कोड में, मैं संदर्भ हो कोड को नमूना से अनुकूलित किया गया है और मेरी पसंद के लिए बाहर नहीं किया गया है, मैं पूरी तरह से समस्या में चिंतित हूं। मैं आरएक्स या डब्ल्यूएफ 4 के साथ कोई समर्थक नहीं हूं, लेकिन उसी समाधान में कहीं और इस तरह सब्सक्राइब किया है। मैंने NuGet के माध्यम से इस परियोजना में आरएक्स जोड़ा है।

संपादित करें: निम्न त्रुटि अगर मैं एक विधि समूह (लैम्ब्डा के बजाय) के रूप में उपयोग:

Error 2 Argument 1: cannot convert from 'method group' to 'System.IObserver<Components.Messages.ModuleMessage>' <removed>\WaitForModuleVisitExtension.cs 34 119 Components 
+0

क्या आप अपने द्वारा वर्णित नमूने के लिए एक लिंक साझा कर सकते हैं? यह काफी दिलचस्प लग रहा है। मैंने हमेशा सोचा कि वेधशालाएं क्रमिक नहीं हैं, तो आप वर्कफ़्लो के अंदर उनका उपयोग कैसे कर सकते हैं जिन्हें किसी भी समय दृढ़ता के लिए समर्थन की आवश्यकता है? – julealgon

+0

यह बहुत समय पहले था, मुझे याद भी नहीं है। मुझे लगता है कि किसी और चीज से विचलित होने से पहले मुझे उस बिंदु पर कभी नहीं मिला (यह एक निजी परियोजना थी) – Sprague

उत्तर

28

आप इस छूट रहा है:

using System; 

ObservableExtensions स्थिर क्लास वाली नाम स्थान है यही कारण है कि सभी Subscribe एक्सटेंशन विधियों के साथ।

एक्सटेंशन विधियों को using निर्देशों के साथ "खोजा गया" (साथ ही कोड का नामस्थान पदानुक्रम उनको उपयोग करने का प्रयास कर रहा है) के माध्यम से "खोजा गया" है।

+2

धन्यवाद! यह स्पष्ट नहीं है ... मेरी इच्छा है कि एक बेहतर त्रुटि हो। मुझे लगता है कि हम विस्तार विधियों के लिए भुगतान की कीमत = (मैं रीशेपर का उपयोग कर रहा हूं, आमतौर पर यह मेरे लिए इन चीजों को पकड़ता है। यह किसी अन्य का अस्तित्व होना चाहिए। सदस्यता छोड़ना जो खोज को रोक रहा है। – Sprague

+0

यह पूरी तरह से गैर-स्पष्ट समस्या है। IObserver लेना सदस्यता लें जो विजुअल स्टूडियो का पता लगाएगा। इसलिए एक्सटेंशन विधियों को नहीं चुना जाएगा। –

+2

दुर्भाग्यवश, यह समस्या उन लोगों को चोट पहुंचती है जो सबसे आवश्यक नामस्थान को हटाते हैं! बहुत बुरा ... – Sprague

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

  • कोई संबंधित समस्या नहीं^_^