当前位置: 首页 > 编程语言 > C#

Prism-EventAggregator.GetEvent,Subscribe()-使用泛型和约束共享

时间:2023-04-10 11:07:07 C#

Prism-EventAggregator.GetEvent。subscribe()-使用泛型和约束我在订阅事件聚合器事件作为棱镜框架的一部分时遇到问题。如果我使用类似eventAggregator.GetEvent().Subscribe(MyMethod)的东西,那么一切正常,我的方法在事件发布时触发。然而,当移动到比I字符串更复杂的对象时,我遇到了问题。我有一堆类,它们都来自一个接口(IRequest),例如我的事件类是这样设置的publicclassMyEvent:PubSubEventwhereTRequest:IRequest{}我有一个通用类(MyClass)其中我使用IRequest的对象——同样,此时一切似乎都工作正常。现在,假设我使用其中的对象Profile发布了MyClass的事件:eventAggregator.GetEvent().Publish(myProfileObject);在我的订阅中,我想要一个捕获MyEvent的所有事件的方法——无论T是Profile还是从IRequest派生的其他对象都无关紧要——这就是我似乎遇到问题的地方。在下面的示例中,第一个有效,但第二个无效-我理想情况下希望使用与第二个类似的东西。eventAggregator.GetEvent().Subscribe(test1);voidtest1(MyClassobj){//这里有些东西}eventAggregator.GetEvent().Subscribe(test2);voidtest2(MyClassobj)whereT:IRequest{//nevergetscalled}我的假设是因为Profile来自IRequest那么它应该可以工作???但事实并非如此!任何帮助将不胜感激。更新如果我使用以下内容,它确实有效,但需要我为每种类型的IRequest创建一个单独的订阅-我只想要一个订阅。eventAggregator.GetEvent().Subscribe(test2);eventAggregator.GetEvent().Subscribe(test2);MyEvent和MyEvent不一样,所以EventAggregator不会将此视为同一事件。为了允许协变类型,这可以在C#4中使用out修饰符来解决。这样的事情应该有效:publicinterfaceIMyClasswhereT:IRequest{}publicclassMyClass:IMyClasswhereT:IRequest{}publicclassMyEvent:PubSubEvent>whereTValue:IRequest{}然后你的事件聚合器看起来像:_eventAggregator。GetEvent>().Subscribe(已接收);privatevoidReceived(IMyClassobj){}_eventAggregator.GetEvent>().Publish(newMyClass());这有帮助吗?以上就是C#学习教程:Prism–EventAggregator.GetEvent。Subscribe()–使用泛型和约束来共享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: