为 Prism Eventaggregator WPF 使用通用的 PubSubEvents
Using generic PubSubEvents for Prism Eventaggregator WPF
我正在尝试包装对 Prism 的 Events from the EventAggregator 的访问以实现可重用性
这是示例代码
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>
的非抽象派生 class
但我仍然遇到错误
'T1' must be a non-abstract type with a public parameterless
constructor in order to use it as parameter....
假设这在 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);
我一直缺少的是 new()
通用类型 T1
.
的约束
显然 GetEvent<T>
的 Prism IEventAggregator 要求 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
}
我正在尝试包装对 Prism 的 Events from the EventAggregator 的访问以实现可重用性
这是示例代码
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>
但我仍然遇到错误
'T1' must be a non-abstract type with a public parameterless constructor in order to use it as parameter....
假设这在 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);
我一直缺少的是 new()
通用类型 T1
.
显然 GetEvent<T>
的 Prism IEventAggregator 要求 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
}