EventAggregator Helper通用方法

时间:2016-10-10 10:52:17

标签: c# generics prism eventaggregator

为什么会出现编译错误?

public class EventAggregationHelper {

    public static SubscriptionToken SubscribeToEvent<T>( IEventAggregator eventAggregator ) where T : EventBase {

        T evt = eventAggregator.GetEvent<T>();
        //T evt = eventAggregator.GetEvent<T>();
        return null;
    }
}

错误是:

  

严重级代码描述项目文件行抑制状态   错误CS0310'T'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法'IEventAggregator.GetEvent()'EntitySetGridTWPF D:\ DEVELOPER.NET \ Comercial \中将其用作参数'TEventType' EntityBookCommon \ EntitySetGridTWPF \ EventAggregation \ EventAggregationHelper.cs 9 Active

就行:

T evt = eventAggregator.GetEvent<T>();

我之前使用过这种方法调用其他泛型方法并且已经工作过了。 GetEvent有什么特别之处?

提前致谢。

1 个答案:

答案 0 :(得分:2)

IEventAggregator.GetEvent有一个new()约束,这意味着您的订阅还需要添加new()约束,并且还需要由您的实现类T来完成,必须有一个公共无参数(默认)构造函数(并且不能是抽象的。)

public static SubscriptionToken SubscribeToEvent<T>
            (IEventAggregator eventAggregator) where T : EventBase, new() {