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メソッドを呼び出すことができます。MakeGenericMethodタイプ外のチェックアウトMethodInfo- MSDN には、役立つヒントと例が含まれています。もちろん、呼び出したい型をどうにかして手に入れる必要がありますGetEvent

于 2012-08-03T20:45:11.787 に答える
0

OtherClassCtor クラスをジェネリックにするか、GetEvent 呼び出し内でジェネリック TabActivationRequest の型を指定する必要があります。

于 2012-08-03T20:49:21.380 に答える