Наблюдаемый (Rx) для непрерывного (асинхронного) потока объектов в хранилище - PullRequest
3 голосов
/ 29 декабря 2011

Я получил Repository типа Item Моя цель состоит в том, чтобы Repository предоставил Observable или, по сути, "поток" Item, используя Observable.

I 'Я полный новичок в отношении RX, но думаю, что я хорошо понял основы.Моя проблема заключалась в том, чтобы найти способ сохранить Observable в активном состоянии и вручную нажать Item на него при входе (это может быть сокеты или что-то еще на основе асинхронности).В основном это Hot Observable.

Я получил его, используя Subject<Item>, на который я подписан, но мне не хватает мощности "обычного Observable", то есть запросов LINQ для фильтрации потока.Я боюсь, что я что-то упускаю или смотрел мимо подходящего подхода.

Любое понимание или направление для начинающего, как я, будет высоко оценено.

Ответы [ 2 ]

2 голосов
/ 28 июня 2013

См. http://rxwiki.wikidot.com/101samples#toc47

Сделайте свой класс родным для IObservable

Если вы собираетесь создавать новую систему, вы можете рассмотреть возможность использования только IObservable.

Использовать тему как бэкэнд для IObservable

class UseSubject
{
    public class Order
    {            
        private DateTime? _paidDate;

        private readonly Subject<Order> _paidSubj = new Subject<Order>();
        public IObservable<Order> Paid { get { return _paidSubj.AsObservable(); } }

        public void MarkPaid(DateTime paidDate)
        {
            _paidDate = paidDate;                
            _paidSubj.OnNext(this); // Raise PAID event
        }
    }

    private static void Main()
    {
        var order = new Order();
        order.Paid.Subscribe(_ => Console.WriteLine("Paid")); // Subscribe

        order.MarkPaid(DateTime.Now);
    }
}
2 голосов
/ 29 декабря 2011

Возможно, вам не хватает ссылки using System.Reactive.Linq, в противном случае выберите et.и др.должен появиться на Subject<T>.

...