You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Prism EventAggregator使用通用PubSubEvents时的泛型约束报错问题

解决Prism EventAggregator封装时的泛型约束错误

我来帮你梳理下这个问题的根源和对应的解决方案:

问题根源

Prism的EventAggregator.GetEvent<T>()方法有两个硬性要求:

  • T必须是非抽象的PubSubEvent<TPayload>派生类
  • T必须具备公共无参构造函数(因为EventAggregator内部会创建或复用该事件类型的实例)

你当前的泛型约束只指定了T1 : CachedEvent<T2>,但没有明确要求T1是非抽象且可实例化,所以编译器会抛出"'T1'必须是非抽象类..."的错误提示。

修正后的代码

protected void Subscription<T1, T2>(Action<T2> onSubscribe) 
    where T1 : CachedEvent<T2>, new()
{ 
    T1 @event = _eventAggregator.GetEvent<T1>(); 
    @event.Subscribe(onSubscribe, true); 
    // 其他代码 
}

关键调整说明

  1. 添加new()约束:这个约束会告诉编译器T1必须拥有公共无参构造函数,既满足GetEvent<T>()的实例化要求,同时也隐含了T1是非抽象类(抽象类无法被实例化,new()约束会自动排除抽象类型)。
  2. 修正拼写错误:你代码里的Subcribe是拼写失误,正确的方法名是Subscribe,这个细节要修正避免运行时出现找不到方法的问题。

如果你的CachedEvent<T>本身是抽象类,只要T1是它的非抽象子类,加上new()约束就完全符合EventAggregator的要求;如果CachedEvent<T>是非抽象类,这个约束也能确保它可以被EventAggregator正确实例化。

内容的提问来源于stack exchange,提问作者Marlon Dumal-is

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:35:57