可从回调方法中观察到
Observable from callback method
假设我有一个 class 它继承了遗留 API 并覆盖了一个在某些事情发生时调用的虚拟方法
type MyClass() as this =
let somethingObservable: IObservable<Something> = ...
override _.OnSomething(s: Something) = ...
如何将 OnSomething 的每次调用转换为 somethingObservable 的通知?
这可能是一个简单的问题,但我找不到正确的方法(我应该使用 not advised ISubject 吗?)。感谢您的帮助。
用这样的主题就可以了,保证实现的正确性。
这是一个使用 FSharp.Control.Reactive
的示例,它让您以惯用的方式编写此内容。
type MyClass() =
inherit Legacy()
let somethingObservable =
Subject.broadcast
override _.OnSomething s =
somethingObservable |> Subject.onNext s |> ignore
member _.AsObservable =
somethingObservable |> Observable.asObservable
您也可以使用 new Subject<_>
及其方法,同样的事情。
在某些程序集中,如果您不想接受 System.Reactive
依赖项,F# 还通过事件原生支持 IObservable
。
type MyClassEvt() =
inherit Legacy()
let event = new Event<_>()
override _.OnSomething s =
event.Trigger s
member _.AsObservable =
event.Publish :> IObservable<_>
假设我有一个 class 它继承了遗留 API 并覆盖了一个在某些事情发生时调用的虚拟方法
type MyClass() as this =
let somethingObservable: IObservable<Something> = ...
override _.OnSomething(s: Something) = ...
如何将 OnSomething 的每次调用转换为 somethingObservable 的通知?
这可能是一个简单的问题,但我找不到正确的方法(我应该使用 not advised ISubject 吗?)。感谢您的帮助。
用这样的主题就可以了,保证实现的正确性。
这是一个使用 FSharp.Control.Reactive
的示例,它让您以惯用的方式编写此内容。
type MyClass() =
inherit Legacy()
let somethingObservable =
Subject.broadcast
override _.OnSomething s =
somethingObservable |> Subject.onNext s |> ignore
member _.AsObservable =
somethingObservable |> Observable.asObservable
您也可以使用 new Subject<_>
及其方法,同样的事情。
在某些程序集中,如果您不想接受 System.Reactive
依赖项,F# 还通过事件原生支持 IObservable
。
type MyClassEvt() =
inherit Legacy()
let event = new Event<_>()
override _.OnSomething s =
event.Trigger s
member _.AsObservable =
event.Publish :> IObservable<_>