Я не могу заставить ReactiveUI MessageBus работать на Windows Phone 7

Я пытаюсь реализовать обмен сообщениями между моими ViewModels. Мой код подтверждения концепции выглядит следующим образом:

RxApp.MessageBus.Listen<int>("test")
    .Subscribe(i => MessageBox.Show(i.ToString()));    

RxApp.MessageBus.SendMessage<int>(42, "test");

Мои модульные тесты выполняются успешно, поэтому я подумал, что это может быть проблема планирования. Я вручную установил планировщик: RxApp.DeferredScheduler = DispatcherScheduler.Instance;

но в любом случае он был установлен на правильный экземпляр, так что, как и ожидалось, никаких изменений. Я могу зарегистрироваться для сообщений. Я просто никогда ничего не получаю :/ Использование пустого контракта на сообщение тоже ничего не меняет.

Я пробовал как на эмуляторе, так и на устройстве (Mango SDK Refresh/Mango Build 7712)

Я надеюсь, что кто-то здесь может мне помочь :) Любые подсказки очень ценятся.


person rollingthunder    schedule 10.08.2011    source источник


Ответы (2)


Я подозреваю, что это ошибка MessageBus — кто вообще пишет эту чушь?

** Я посмотрю на это :)

person Ana Betts    schedule 11.08.2011
comment
Я не хочу ворчать, но у меня как бы крайний срок здесь ;) Я бы хотел использовать MessageBus, но, возможно, мне нужно найти замену ... В любом случае, я хотел бы помочь в поиске решение для MessageBus, если я могу :) - person rollingthunder; 17.08.2011
comment
Даже если я это исправлю, выпуск релиза — довольно трудоемкое дело. MessageBus на самом деле представляет собой всего лишь один файл CS, вы можете скопировать его и изменить, чтобы он делал то, что вы хотите (вы даже можете назвать свою реализацию MessageBus2, а затем установить RxApp.MessageBus) - person Ana Betts; 18.08.2011
comment
Я не хочу бросать вас в беде, но с практической точки зрения это самый быстрый способ выйти из тупика. - person Ana Betts; 19.08.2011
comment
Вопреки моим ожиданиям, это оказалось в моих силах решить ;) Я отправил вам запрос на вытягивание на Github с исправлениями. - person rollingthunder; 23.08.2011

Моя ошибка, предполагая, что это что-то нетривиальное с планировщиком :)

Проблема заключалась в том, что класс Tuple, используемый в качестве ключа словаря на WP7/SL, не реализует полезное переопределение Equals().

Словарь никогда не возвращал совпадений при поиске зарегистрированных предметов.

GetHashCode() также следует заменить пользовательской реализацией.

person rollingthunder    schedule 23.08.2011
comment
Не очевидно, как этот ответ относится к вопросу. - person Ritch Melton; 18.03.2012