私は次のことを成功させるために努力しています。私はIHandle<>
インタフェースのパラメータとしてジェネリッククラスを使用したい:-(ここでのサンプルコードは次のとおりです。caliburn.microのIHandle <>でパラメータとしてgenenricクラスを使用する方法?
public interface Message<T>
{
T Payload { get; set; }
}
...
public MyViewModel : Screen, IHandle<IMessage<T>>
{
...
public void Handle(IMessage<T> message)
{
....
}
}
質問です:どのように私は正しい方法でIHandleを宣言しないまたは私は必要なのでしょうか?
が、私は時間のため、この問題を解決しようとにより、私が取得狂気の最良の方法によという事実に。 以来、私は私の心の中だけのブロックを持っていると思う?それはIHandle
と
Handle()
を所有し、各
T
に指定します
ご協力ありがとうございます。
更新:私が何をしたいのかを示すために、私は2つの可能な限り良いソリューションを追加しました。
考えられる解決策1:
public MyViewModel : Screen, IHandle<IMessage<String>>, IHandle<IMessage<Int32>>
のように。この問題は、新しいT
をサポートする必要がある場合、ViewModelを編集する必要があることです。この場合、汎用コードIMessage
をスキップして、具体的なメッセージ(例えば、IStringMessage
、など)を作成すると、コードを読みやすくしますが、使用する各タイプに結合することができます。
解決策2:
public MyViewModel : Screen, IHandle<IMessage>
とにIMessage
を変更します。
public interface IMessage
{
Object Payload { get; set; }
}
これは、仕事をすることができますが、私はPayload
のtypesaftyを失います。オプションのTypeOfPayload
プロパティを追加することもできますが、私が探しているソリューションではありません。
はあなたへの一般的なパラメータを提供する必要がありますか 'IHandleは、<>' 'MyViewModel'でそれを実装するとき?そうでなければ、単に 'IHandler>'をしないのはなぜですか? –
kuskmen
これまでのお返事ありがとうございますが、私はviewmodel自体を一般的にすることはできません。私はメッセージを汎用的に扱わせたいと思っており、それぞれのメソッドを持つことを避けようとしています。。 –
Matthias