15

RX拡張機能とWF4を使用して、監視可能なメッセージに反応してワークフローを進行させるワークフローを作成しています。これを行うために、IObservableを含むオブジェクトを取り込みます(ModuleMessageは私の抽象クラスです)。私が抱えている問題は、.Subscribeがその拡張メソッド、つまりラムダ式/メソッドグループの拡張メソッドを認識できないことです。次のコードには、参照があります。

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を追加しました。

編集:(ラムダの代わりに)メソッドグループとして使用する場合、次のエラー:

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

1 に答える 1

31

あなたはこれを見逃しています:

using System;

これは、すべての拡張メソッドObservableExtensionsを持つ静的クラスを含む名前空間です。Subscribe

using拡張メソッドは、ディレクティブ(およびそれらを使用しようとするコードの名前空間階層)を介して「検出」されます。

于 2012-05-09T17:22:18.170 に答える