かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

ReactiveProperty v2.7.4をリリースしました

www.nuget.org

@neueccさんが、またプルリクをくれました。UniRxからポーティングされたクラスが1つ追加されました。 MessageBrokerというRxっぽく使えるMessenger的なクラスになります。

基本的に以下のような使い方になります。

// 購読
MessageBroker.Default.Subscribe<SampleClass>(x => Console.WriteLine(x));
// ToObservableでRxのメソッド使い放題
MessageBroker.Default.ToObservable<SampleClass>()
    .ObserveOn(Dispatcher)
    .Subscribe(x => Console.WriteLine(x));

// 発行
MessageBroker.Default.Publish(new SampleClass());

非同期版も用意されています。

AsyncMessageBroker.Default.Subscribe<SampleClass>(async x => 
{
    Console.WriteLine(x);
    return Task.Delay(TimeSpan.FromSeconds(2));
});

var d = AsyncMessageBroker.Default.Subscribe<SampleClass>(async x => 
{
    Console.WriteLine(x);
    return Task.Delay(TimeSpan.FromSeconds(4));
});

// 全てのSubscribeが終了するまで待ちます
await AsyncMessageBroker.Default.PublishAsync(new SampleClass());

// 購読解除
d.Dispose();
await AsyncMessageBroker.Default.PublishAsync(new SampleClass());

一応、上記のようなDefaultでデフォルトインスタンスを使いまわすことがほとんどだと思いますが自分でインスタンス管理したい場合は特に制約は設けてないので好きにnewするなりDIコンテナに登録しちゃってください。