Как выставить WhenAny и т. д.

Я уверен, что я что-то упустил или загнал себя в какой-то странный неудовлетворенный угол, но вот что я пытаюсь сделать.

У меня есть приложение WPF, использующее Unity в качестве IoC. У меня есть ряд сервисов, которые имеют интерфейс. Я работаю со своими сервисами через интерфейсы, чтобы сервисы можно было легко заменить или чтобы я мог предложить выбор конечному пользователю. Все стандартные вещи для программирования интерфейсов.

На самом деле все мои сервисы реализуют ReactiveObject. Теперь я хочу сделать некоторые вещи для обработки команд и пытаюсь заставить работать поведение CanExecute.

Моя основная проблема заключается в том, что я не могу использовать WhenAny, если не приведу интерфейс к физической реализации (таким образом, получу полную иерархию типов для компиляции, которая может видеть WhenAny). Однако это приведение нарушает интерфейсы и означает, что я теряю возможность менять реализации.

Существует ли интерфейс ReactiveUI, который предоставляет WhenAny и т. Д., Из которого я мог бы получить свои сервисные интерфейсы и, таким образом, иметь возможность использовать замечательные функции ReactiveUI, оставаясь при этом неспецифическим для типа?


person Simon    schedule 24.03.2013    source источник
comment
В вопросы не нужно добавлять личные приветствия. Ваша контактная карточка отображается в правом нижнем углу всех ваших вопросов.   -  person Patrick    schedule 24.03.2013
comment
Извините, я впервые задаю вопрос и никогда не замечал, что никто этого не делает. :)   -  person Simon    schedule 24.03.2013


Ответы (1)


Почему вы не можете использовать WhenAny для экземпляра, который является интерфейсом? Начиная с ReactiveUI 4.x, WhenAny должен быть на каждом объекте.

Если вы все еще используете 3.x, вы можете написать свои интерфейсы следующим образом:

interface ICoolInterface : IReactiveNotifyPropertyChanged
{
    /* ... */
}
person Ana Betts    schedule 25.03.2013
comment
Ах, хорошо, так что, если мой сервисный интерфейс наследуется от этого интерфейса IReactive, я должен получить расширения WhenAny и т. д.? Я попробую это позже и подтвержу. - person Simon; 25.03.2013
comment
Сработало удовольствие. Я обновлюсь до последней версии, чтобы получить исправления и функции. - person Simon; 25.03.2013