2011-08-02 6 views
0
string CreateCacheKey(delegate methodDelegate) 
{ 
// return cache key based on the input parameters of the method passed to this 
} 

User[] GetAll(short id, string name) 
{ 
    CreateCacheKey (this.GetAll); 
} 

ジェネリックデリゲートだけでメソッドの入力パラメータを取得するにはどうすればよいですか?ジェネリックデリゲートだけでメソッドの入力パラメータを取得するにはどうすればよいですか?

私は唯一の選択肢は反射でなければならないと思います。

おかげで、

+0

それはコンパイルされますか? – flq

+0

デリゲート型はどこかで指定する必要があります。おそらく 'delegate'キーワードではなく' Delegate'型を意味します(ここでは大文字小文字は重要です) –

答えて

0

のではなく、通常のdelegateは、あなたが固定されたパラメータを持つdelegateを指定、または汎用デリゲート型(GetAllHandler<T>)を使用することができますか?

CreateCacheKeyさんは何をしているのですか?なぜですか?おそらく実際の例ですか?

+0

リポジトリメソッドごとにパラメータが異なります。私はストアドプロシージャからデータを返す私のリポジトリメソッドのキャッシュキーを作成するためにこれを使用しています。結果をキャッシュに格納するか、またはキャッシュ内の既存のデータと照合します。 –

+0

ああ、そうだ。おそらく、各メソッドにキャッシュの方法を指定するほうがよいでしょうか?パラメータのいくつかが実際にフィルタパラメータ/選択パラメータではなく、キャッシュキーに含まれない場合はどうなりますか?または、メソッドまたはパラメータのカスタム属性を使用して、キャッシュキーの一部を示すことができます。 –

+0

カスタム属性は理想的ですが、使用できないPostsharpのようなAOPを使用する必要があります。私の場合、すべての入力パラメーターは照会用であり、すべてがデータ・アクセス・リポジトリー・メソッドです。 –

1

デリゲートには.Methodがあります(コンポジットではない単一のデリゲートであると仮定して、GetInvocationListを呼び出す必要があります)。

メソッドからGetParameters()をクエリできます。

+0

これは私が必要とするように聞こえる。デリゲートインスタンスからGetParameters()メソッドを取得する方法は? –

関連する問題