C# 将事件负载设置为通用对象
我有这样的代码:C# 将事件负载设置为通用对象,c#,.net,generics,prism,C#,.net,Generics,Prism,我有这样的代码: public class TabActivationRequestEvent<T> : CompositePresentationEvent<TabActivationRequest<T>>{} public class TabActivationRequest<T> { public IOMStudioTab OMStudioTab { get; set; } public T
public class TabActivationRequestEvent<T> :
CompositePresentationEvent<TabActivationRequest<T>>{}
public class TabActivationRequest<T>
{
public IOMStudioTab OMStudioTab { get; set; }
public T RegionData { get; set; }
}
public void RequestTabActivation<T>(TabActivationRequest<T> tabActivationRequest)
{
var prismEvent = eventAggregator.GetEvent<TabActivationRequestEvent<T>>();
prismEvent.Publish(tabActivationRequest);
}
公共类选项卡ActivationRequestEvent:
复合表示事件{}
公共类TabActivationRequest
{
公共IOMStudioTab OMStudioTab{get;set;}
公共T区域数据{get;set;}
}
public void RequestTabActivation(TabActivationRequest TabActivationRequest)
{
var prismEvent=eventAggregator.GetEvent();
Publish(tabActivationRequest);
}
我使用它发送一个Prism事件(通过事件聚合器)
然而,当我去订阅时,我有一个问题。这就是我试图做的:
void OtherClassCtor()
{
var tabFocusEvent = eventAggregator.GetEvent<TabActivationRequest<T>>();
tabFocusEvent.Subscribe(OnTabFocusRequest, true); ^
} |
|
private void OnTabFocusRequest<T>(TabActivationRequest<T> regionData) |
{ |
// do stuff here |
} |
|
This part Fails -------------------------------------------------------+
void OtherClassCtor()
{
var tabFocusEvent=eventAggregator.GetEvent();
tabFocusEvent.Subscribe(OnTabFocusRequest,true)^
} |
|
私有无效OnTabFocusRequest(选项卡ActivationRequest regionData)|
{ |
//在这里做事|
} |
|
这部分失败了-------------------------------------------------------+
编译器说我不能在那里使用类型参数。当我站在后面看它时,它是有意义的。(当前类不知道任何类型参数)
但是定义类型对我来说是一个交易破坏者,所以我只打算使用对象
但这让我想知道是否有任何花哨的编码可以让我通过事件系统传递泛型类型
如果你知道什么,请把它贴出来。如果没有,我会对我的
对象和我的施法感到满意。正如您所说,它不起作用,因为其他类
本身没有通用类型参数提供给选项卡激活请求
显而易见的解决方案是将OtherClass
设置为泛型。否则,可以使用反射调用GetEvent
方法。查看MethodInfo
type的MakeGenericMethod
——MSDN包含一些有用的信息。当然,您仍然需要以某种方式获得想要调用GetEvent
的类型。正如您所说,它不起作用,因为OtherClass
本身没有通用类型参数提供给TabActivationRequest
显而易见的解决方案是将OtherClass
设置为泛型。否则,可以使用反射调用GetEvent
方法。查看MethodInfo
type的MakeGenericMethod
——MSDN包含一些有用的信息。当然,您仍然需要以某种方式获得想要调用GetEvent
的类型。您需要将OtherClassCtor类设置为泛型,或者在GetEvent调用中为您的泛型选项卡ActivationRequest提供一个类型。您需要将OtherClassCtor类设置为泛型,或者在GetEvent调用中为泛型TabActivationRequest提供一个类型