Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将事件负载设置为通用对象_C#_.net_Generics_Prism - Fatal编程技术网

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提供一个类型