RxFree 1.1.3
dotnet add package RxFree --version 1.1.3
NuGet\Install-Package RxFree -Version 1.1.3
<PackageReference Include="RxFree" Version="1.1.3"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add RxFree --version 1.1.3
#r "nuget: RxFree, 1.1.3"
// Install RxFree as a Cake Addin #addin nuget:?package=RxFree&version=1.1.3 // Install RxFree as a Cake Tool #tool nuget:?package=RxFree&version=1.1.3
一个超轻量级 Rx 仅源代码 (C#) nuget,以避免使用 System.Reactive 的完整版本依赖 IObservable<T>
生产者。
100% 无依赖(基于源)支持,允许库作者暴露 IObservable<T>,利用 Subject<T>、CompositeDisposable、IObservable<T>.Subscribe 扩展方法重载、IObservable<T>.Select/Where/OfType LINQ 操作符等。
用法
所有为 Subject<T>
和提供的扩展方法(如 Subscribe
重载)编写的文档和示例(即官方可用的 System.Reactive
)也适用于此项目,因为实现大量基于它(将其简化以仅包含源代码的必需品,Subject<T>
几乎完全相同)。例如:使用 Subject。
using System;
using System.Reactive.Subjects;
var subject = new Subject<string>();
subject.Subscribe(x => Console.WriteLine($"Got raw value {x}"));
subject.Where(x => int.TryParse(x, out _))
.Select(x => int.Parse(x))
.Subscribe(x => Console.WriteLine($"Got number {x} (squared is {x * x})"));
subject.Where(x => bool.TryParse(x, out var value) && value)
.Subscribe(x => Console.WriteLine($"Got a boolean True"));
while (Console.ReadLine() is var line && !string.IsNullOrEmpty(line))
subject.OnNext(line);
如果您此项目中只使用 System.Reactive
中的最常用功能子集(也在此项目中提供),则此包是 System.Reactive
的直接替代。
原因
大多数人需要 Subject<T>
(了解更多关于 使用 Subject)以及可能提供 Subscribe
重载的 ObservableExtensions
以提供 lambdas 而不是 IObserver<T>
。在大多数情况下,仅为了获取可重用库所需的这些东西而承担相对较大且重要的依赖 System.Reactive 是多余的。
除了Subject<T>
之外,生产者的典型活动包括处理一次性对象以及可能自身过滤/查询/转换它们所消耗的其他可观察对象。因此,以下简单功能被提供
Disposable.Empty
和Disposable.Create(Action)
CompositeDisposable
:允许批量取消订阅Subject<T>
:用于生成可观察的序列- 对
IObservable<T>
的扩展方法- 重载的
Subscribe
方法,接收onNext、onError和onCompleted的委托 Select
、Where
、OfType
等LINQ运算符
- 重载的
项目当前以源形式提供这些功能,作为你项目内部的自实现使用类,没有任何外部依赖。这些类甚至在你项目中都是不可见的,因为NuGet会自动将它们提供给编译器,并将它们嵌入到你的程序集中,这样你就可以像处理项目中的任何其他代码一样进行完全调试。
赞助商
-
.NETStandard 2.0
- 无依赖项。
NuGet包
此包没有被任何NuGet包使用。
GitHub仓库
此包没有被任何流行GitHub仓库使用。