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

时间:2017-11-13 12:12:56

标签: reactiveui

我试图将ReactiveList子类化,以便它响应我编写的ReactiveDictionary中的更改,而不是父列表。

这是ReactiveList子类的类和构造函数签名。

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>

问题是由于错误,该类没有编译:

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推荐版本的建议也不错。

2 个答案:

答案 0 :(得分:4)

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

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

  

用于启用v3应用的Reactive Extensions(Rx)兼容性库   使用v4

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

答案 1 :(得分:2)

不幸的是,目前依赖性正在发生。但对于当前的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