的IObservable<>缺少。订阅扩展方法

时间:2012-05-09 17:20:11

标签: workflow-foundation-4 system.reactive nuget

我正在使用RX扩展和WF4来创建工作流,该工作流对可观察的消息做出反应以推进工作流程。为此,我引入了一个包含IObservable的对象(ModuleMessage是我的抽象类。)我遇到的问题是.Subscribe无法识别任何扩展方法,即lambda extpressions /方法组。在以下代码中,我有参考:

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

请注意,此代码是根据样本改编而来的,并没有按照我的喜好进行考虑,我纯粹关注手头的问题。我不是RX或WF4的专业人士,但在同一解决方案中以其他方式使用订阅。我已经通过NuGet为这个项目添加了RX。

编辑:如果我用作方法组(而不是lambda),则出现以下错误:

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

1 个答案:

答案 0 :(得分:30)

你错过了这个:

using System;

这是包含ObservableExtensions静态类的命名空间,包含所有Subscribe扩展方法。

通过using指令(以及试图使用它们的代码的命名空间层次结构)“发现”扩展方法。