我正试图将Events的EventAggregator封装从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
}
我在T1
,CachedEvent
上设置了约束,这是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);
答案 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
}