Подтвердить что ты не робот

IObservable <> отсутствует. Методы расширения подписки

Я использую 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, но использовал подписку таким образом в другом месте в том же самом решении. Я добавил RX в этот проект через NuGet.

Изменить: следующая ошибка, если я использую в качестве группы методов (вместо лямбда):

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

Ответ 1

Вам не хватает этого:

using System;

Это пространство имен, содержащее статический класс ObservableExtensions со всеми методами расширения Subscribe.

Методы расширения "обнаруживаются" через директивы using (а также иерархию пространства имен кода, пытающегося их использовать).