我遇到一個問題訂閱與事件聚合器來作爲棱鏡框架的一部分。棱鏡 - EventAggregator.GetEvent <>。訂閱() - 使用泛型和Contraints
如果我使用的東西,如
eventAggregator.GetEvent<string>().Subscribe(MyMethod)
那麼這一切工作正常,當事件已經發表我的方法火災。
但是,當移動到比I字符串更復雜的對象時,我遇到了問題。
我有一大堆的所有從接口(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
}
我的假設是,因爲配置文件派生自IRequest,那麼它應該工作?但它不!
任何幫助,將不勝感激。
UPDATE
如果我用下面的,它的工作,但需要我創建一個單獨的認購提供每種類型IRequest的 - 我期待只有一個訂閱。
eventAggregator.GetEvent<MyEvent<Profile>>().Subscribe(test2);
eventAggregator.GetEvent<MyEvent<User>>().Subscribe(test2);
嘿。我認爲你的問題表明了努力,但是你可以通過預先準備一份剝離樣本的完整副本粘貼樣本+使用nuget引用來激勵像我這樣的懶惰人。有時在準備時,你也會發現它不工作的原因(至少我已經做了幾次) – Dbl
@AndreasMüller - 謝謝,未來會嘗試添加額外的鏈接/引用等 - 儘管在這實例中,我使用的代碼更加複雜,因此試圖在簡化所有相關信息的同時提供相關信息 –