Имам проблем с абонирането за събития с агрегатора на събития, който идва като част от рамката на призмата.
Ако използвам нещо като
eventAggregator.GetEvent<string>().Subscribe(MyMethod)
тогава всичко работи добре, моят метод се задейства, когато дадено събитие е публикувано.
Въпреки това, когато преминавам към по-сложен обект, различен от I string, срещам проблеми.
Имам куп класове, които всички произтичат от интерфейс (IRequest) например
Имам настройка на класа на събитието, както следва
public class MyEvent<TRequest> : PubSubEvent<MyClass<TRequest>> where TRequest : IRequest {}
Имам общ клас (MyClass), който използва обект на IRequest вътре в него - отново, всичко изглежда работи добре на този етап.
Сега, да кажем, че публикувам събитие на MyClass, което използва обекта Profile вътре в него:
eventAggregator.GetEvent<MyEvent<Profile>>().Publish(myProfileObject);
В моя абонамент бих искал метод, който може да улови всички събития на MyEvent - Без значение дали T е Profile или някакъв друг обект, който произлиза от 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);