F# 从回调方法可以观察到

F# 从回调方法可以观察到,f#,observable,reactive-programming,system.reactive,rx.net,F#,Observable,Reactive Programming,System.reactive,Rx.net,假设我有一个类,它继承了遗留API并重写了一个虚拟方法,在发生某些事情时调用该虚拟方法 type MyClass() as this = let somethingObservable: IObservable<Something> = ... override _.OnSomething(s: Something) = ... 键入MyClass(),如下所示= 让某物可观测:IObservable=。。。 覆盖u.OnSomething(s:Something

假设我有一个类,它继承了遗留API并重写了一个虚拟方法,在发生某些事情时调用该虚拟方法

type MyClass() as this =
    let somethingObservable: IObservable<Something> = ...

    override _.OnSomething(s: Something) = ...
键入MyClass(),如下所示=
让某物可观测:IObservable=。。。
覆盖u.OnSomething(s:Something)=。。。
如何将OnSomething的每次调用转换为某个可观察事物的通知


这可能是一个简单的问题,但我找不到正确的方法(我应该使用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
您还可以使用
新主题
及其方法,同样。 在某些程序集中,如果您不愿意接受
系统。被动的
依赖关系,F#还通过事件本机支持
IObservable

type MyClassEvt() =
    inherit Legacy()
    let event = new Event<_>()

    override _.OnSomething s = 
        event.Trigger s

    member _.AsObservable = 
        event.Publish :> IObservable<_>
键入MyClassEvt()=
继承遗产
让事件=新事件()
覆盖u.OnSomething s=
事件。触发s
成员u.AsObservable=
event.Publish:>IObservable

使用这样的主题很好,可以确保实现的正确性。 下面是一个使用
FSharp.Control.Reactive
的示例,它为您提供了编写此文档的惯用方法

type MyClass() =
    inherit Legacy()
    let somethingObservable = 
        Subject.broadcast

    override _.OnSomething s = 
        somethingObservable |> Subject.onNext s |> ignore

    member _.AsObservable = 
        somethingObservable |> Observable.asObservable
您还可以使用
新主题
及其方法,同样。 在某些程序集中,如果您不愿意接受
系统。被动的
依赖关系,F#还通过事件本机支持
IObservable

type MyClassEvt() =
    inherit Legacy()
    let event = new Event<_>()

    override _.OnSomething s = 
        event.Trigger s

    member _.AsObservable = 
        event.Publish :> IObservable<_>
键入MyClassEvt()=
继承遗产
让事件=新事件()
覆盖u.OnSomething s=
事件。触发s
成员u.AsObservable=
event.Publish:>IObservable