かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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コンテナに登録しちゃってください。