使用通用PubSubEvents for Prism Eventaggregator WPF

时间:2018-04-18 08:49:12

标签: c# wpf eventaggregator

我正试图将EventsEventAggregator封装从Prism的{{3}}开始重新使用

这是一个示例代码

protected void Subscription<T1,T2>(Action<T2> OnSubcribe) where T1:CachedEvent<T2>
{
    T1 @event  = _eventAggregator.GetEvent<T1>();
    event.Subcribe(OnSubcribe,true);
    //Some Codes other codes
}

我在T1CachedEvent上设置了约束,这是PubSubEvent<TPayload>的非抽象派生类

但我仍然收到错误

  

&#39; T1&#39;必须是具有公共无参数的非抽象类型   构造函数,以便将其用作参数....

假设这在C#中并不真正有效,还有其他选择吗?

更新

这是我到目前为止所做的 我已将@event作为参数

protected void Subscription<T1,T2>(T1 @event, Action<T2> OnSubcribe) where T1:CachedEvent<T2>
{
    @event.Subcribe(OnSubcribe,true);
    //Some Codes other codes
}

我的应用程序有效,但我仍然没有摆脱创建@event的锅点,手动拨打GetEvent,每次拨打Subscription

示例:

Subcription(eventAggregator.GetEvent<SomeEventBasedOnCachedEvent>(),AMethodDoneOnSubcribe);

1 个答案:

答案 0 :(得分:0)

我一直缺少的是泛型new() T1 约束。

显然GetEvent<T>的{​​{1}}要求T必须有一个无参数的构造函数。

protected void Subscription<T1,T2>(Action<T2> OnSubcribe) where T1:CachedEvent<T2>,new()
{
    T1 @event  = _eventAggregator.GetEvent<T1>();
    event.Subcribe(OnSubcribe,true);
    //Some Codes other codes
}