かたちづくり

つれづれに、だらだらと、おきらくに

続・Weak Event パターン

先日こんなエントリ(Weak Event パターン - かたちづくり)を書きましたが、Observable モジュールを拡張して弱参照でサブスクライブできるようにしておくと応用が効いて便利そうかな、などと思い作ってみました。

module Observable =

  type private WeakSubscription<'a> (callback : 'a -> unit, subscription : IDisposable) =
    member __.Callback = callback
    override __.Finalize () = subscription.Dispose ()
    interface IDisposable with member __.Dispose () = subscription.Dispose ()

  let subscribeWeakly (callback : 'a -> unit) source =
    let callbackRef = WeakReference callback
    let subscription = source |> Observable.subscribe (fun x ->
      match callbackRef.Target with :? ('a -> unit) as callback -> callback x | _ -> ())
    new WeakSubscription<'a> (callback, subscription) :> IDisposable

しかし subscribeWeakly という関数名はもうちっとなんとかならんかなー、と。これじゃあまるで週刊で購読してるみたいだ。(いちおうスペル違うけどさ)