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