ReactiveUI - 类型 'IScheduler' 在未引用的程序集中定义

ReactiveUI - The type 'IScheduler' is defined in an assembly that is not referenced

我正在尝试子class ReactiveList 以便它响应我编写的 ReactiveDictionary 中的更改,而不是父列表。

这是 ReactiveList subclass 的 class 和构造函数签名。

public class ReactiveDictionaryDerivedList<TKey, TValue, TDerived> : ReactiveList<TDerived>, IReactiveDerivedList<TDerived>
{
    public ReactiveDictionaryDerivedList(
        IReadOnlyReactiveDictionary<TKey, TValue> dict,
        Func<TValue, TDerived> selector,
        Func<TValue, TDerived, bool> derivedValueFinder,
        IScheduler scheduler)
    {
    }

这是我在项目中的依赖项。请注意,我使用的是 System.Reactive 的 4.0.0 预览版,因为它是由 ReactiveUI 8.0.0 alpha 安装的。 (我正在使用 ReactiveUI alpha,因为这似乎是 what is recommended these days

<packages>
  <package id="ReactiveUI" version="8.0.0-alpha0113" targetFramework="net452" />
  <package id="ReactiveUI.WPF" version="8.0.0-alpha0113" targetFramework="net452" />
  <package id="Splat" version="2.0.0" targetFramework="net452" />
  <package id="System.Reactive" version="4.0.0-preview00001" targetFramework="net452" />
</packages>

问题是 class 由于错误而无法编译:

error CS0012: The type 'IScheduler' is defined in an assembly that is not referenced.
You must add a reference to assembly 'System.Reactive.Interfaces, Version=3.0.1000.0, 
Culture=neutral, PublicKeyToken=94bc3704cddfc263'.

任何解决方法的想法都将不胜感激。关于 ReactiveUI 和 System.Reactive 的推荐版本的建议也很好。

不幸的是,目前依赖性发生了一些可疑的事情。但对于当前的 8.0 版本,建议安装 System.Reactive 3.1。这是唯一经过测试的 8.0 版本。

如果您开始为您的项目使用 PackageReference,您将不需要自己定义 System.Reactive 依赖项,但包管理器会选择它。但这可能不适用于 WPF。

参见:https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files

在我的 WPF 应用程序中,我必须安装版本为 4.0.0-preview00001 的 System.Reactive.XXXXX 包(Core、Interfaces、Linq、PlatformServices、Windows.Threading、Windows.Forms)。

所有这些包都带有 System.Reactive.Compatibility 包 (nuget link):

Reactive Extensions (Rx) Compatibility Library for enabling v3 apps to work with v4

您应该尝试在您的项目中使用它。