Свойство наблюдаемого класса не вызывает подписку - PullRequest
0 голосов
/ 29 апреля 2020

Простая наблюдаемая переменная работает, как и ожидалось, и немедленно вызывает обратный вызов в том же потоке. Почему переменная класса любого наблюдаемого типа (Subject, ISubject, Observable, IObservable) не вызывает обратный вызов?

Пример с простой переменной - [Работает]

var x1 = new Subject<string>();
var x2 = x1.DistinctUntilChanged();

x2.Subscribe(o =>
{
  // Triggered as expected
});

x1.OnNext("Hello");

Пример с классом - [НЕ работает]

public class InstrumentModel
{
  public Subject<string> Demo => new Subject<string>();
}

var class1 = new InstrumentModel();

class1.Demo
  //.DistinctUntilChanged()
  //.SubscribeOn(Scheduler.CurrentThread)
  //.ObserveOn(Scheduler.CurrentThread)
  .Subscribe(o =>
{
  // Never triggered 
});

class1.Demo.OnNext("Hello");

1 Ответ

2 голосов
/ 29 апреля 2020

Проблема в том, что вы заставили Demo возвращать новый экземпляр Subject<string> каждый раз, когда он используется.

Demo экземпляр, на который вы тоже подписались, - это не тот экземпляр, который вы назвали OnNext() вкл.

class1.Demo.Subscribe(...); // makes new instance `Subject<string>`

class1.Demo.OnNext("Hello"); // makes another new instance of `Subject<string>`

Сохраните тот же экземпляр, и он будет работать. Например:

public class InstrumentModel
{
  public Subject<string> Demo = new Subject<string>();
}

или:

public class InstrumentModel
{
    public InstrumentModel()
    {
        this.Demo = new Subject<string>();
    }
    public Subject<string> Demo { get; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...