我有这样的代码:
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
和我的演员感到满意。
答案 0 :(得分:1)
正如您所说,它不起作用,因为OtherClass
本身没有通用类型参数可供TabActivationRequest
使用。
明显的解决方案是使OtherClass
通用。否则,您可以使用反射来调用GetEvent
方法。查看MakeGenericMethod
类型的MethodInfo
- MSDN包含一些有用的hints and an example。当然,您仍然需要以某种方式获得要使用。{/ p>调用GetEvent
的类型
答案 1 :(得分:0)
您需要将OtherClassCtor类设为通用类,或者在GetEvent调用中为通用TabActivationRequest提供类型。