1

我有这样的代码:

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);
}

我用它来发送一个 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 -------------------------------------------------------+

编译器说我不能在那里使用类型参数。当我站在后面看它时,它是有道理的。(当前类对任何类型参数一无所知)。

但是定义类型对我来说是一个交易破坏者,所以我只打算使用object.

但这让我想知道是否有任何花哨的编码可以让我通过事件系统传递泛型类型。

如果您知道任何事情,请发布它。如果没有,我会对我object和我的选角感到满意。

4

2 回答 2

1

正如您所说,它不起作用,因为它本身OtherClass没有泛型类型参数可提供给TabActivationRequest.

明显的解决方案是OtherClass通用的。否则,您可以使用反射来调用该GetEvent方法。签出类型 - MSDN 包含一些有用MakeGenericMethod提示和示例。当然,您仍然需要以某种方式获得您想要调用的类型。MethodInfoGetEvent

于 2012-08-03T20:45:11.787 回答
0

您需要将 OtherClassCtor 类设为泛型,或者在 GetEvent 调用中为泛型 TabActivationRequest 提供类型。

于 2012-08-03T20:49:21.380 回答