У меня проблема с подпиской на события с агрегатором событий, который входит в состав prism framework.
Если я использую что-то вроде
eventAggregator.GetEvent<string>().Subscribe(MyMethod)
тогда все работает нормально, мой метод срабатывает, когда событие опубликовано.
Однако при переходе к более сложному объекту, отличному от строки, я сталкиваюсь с проблемами.
У меня есть куча классов, которые, например, происходят из интерфейса (IRequest).
У меня есть настройка класса событий следующим образом
public class MyEvent<TRequest> : PubSubEvent<MyClass<TRequest>> where TRequest : IRequest {}
У меня есть общий класс (MyClass), который использует внутри него объект IRequest - опять же, на данный момент все работает нормально.
Теперь предположим, что я публикую событие MyClass, которое использует профиль объекта внутри него:
eventAggregator.GetEvent<MyEvent<Profile>>().Publish(myProfileObject);
В моей подписке мне нужен метод, который может перехватывать все события MyEvent. Независимо от того, является ли T профилем или каким-либо другим объектом, производным от IRequest, здесь у меня, похоже, возникают проблемы.
В следующих примерах первый работает, а второй нет — в идеале я хотел бы использовать что-то похожее на второй.
eventAggregator.GetEvent<MyEvent<Profile>>().Subscribe(test1);
void test1 (MyClass<Profile> obj)
{
//Some stuff here
}
eventAggregator.GetEvent<MyEvent<IRequest>>().Subscribe(test2);
void test2<T>(MyClass<T> obj) where T : IRequest
{
//never gets called
}
Я предполагаю, что, поскольку Profile происходит от IRequest, он должен работать??? Но это не так!!
Любая помощь будет оценена по достоинству.
ОБНОВЛЕНИЕ
Если я использую следующее, это работает, но мне потребуется создать отдельную подписку для каждого доступного типа IRequest — я хочу иметь только одну подписку.
eventAggregator.GetEvent<MyEvent<Profile>>().Subscribe(test2);
eventAggregator.GetEvent<MyEvent<User>>().Subscribe(test2);