かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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