2012-04-14 16 views
0

キャッスルウィンザーがどのように動作するかの実例を誰にでも教えてください。Castle Windsorを使用したAOPキャッシング

私は次のようにIInterceptorから継承私のCacheAspectを定義する出発点として推測:

public class CacheAspect : IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     // Code here to check if data is in cache and if so 
     // put that into invocation.ReturnValue... job done! 

     // If not then invoke the method 
     invocation.Proceed(); 

     // Now cache the result of the invocation 
    } 
} 

私はその後、私のCacheAspect ...

[Interceptor(typeof(CacheAspect))] 
    public List<string> GetStaticData() 
    { 
    } 

で任意の方法を飾ることができます。..ともちろんウィンザーのコンテナにすべてを登録してください。

しかし...

  1. は、どのように私は、メソッド呼び出しごとに私のキャッシュに何かをしたい時間の量を変化することができますか?この例では、60分キャッシュすることができます。 1日などの他の例については、各キャッシュ期間にCacheAspectを作成する必要がありますか?

  2. 各メソッドからキャッシュされた各値を識別する最適な方法は何ですか? invocation.TargetType.Nameinvocation.Method.Nameの組み合わせを使用しますか?

  3. 質問2で展開する - パラメータが渡されるとどうなりますか?次に、特定のパラメータセットに一致するデータがキャッシュされているかどうかを判断する必要があります。

ありがとう。

答えて

0

ダイナミックプロキシを使用してキャッシングを有効にするには、しばらく前にmbcache http://code.google.com/p/mbcacheを構築しました。内部的に質問を処理します。ソースコードには、Castle Windsor(およびLinFu)を使用した実装があります。それを見てみましょう(または、必要に応じてフレームワークを直接使用してください)。ご質問

ショート答えを

  1. 私の知る限り - ウィンザー(または他のプロキシFW)は、任意のは、このためのサポートを内蔵しておりません。あなたはいくつかのキャッシュフレームワークを使用する必要があります(または、弱い参照を使用して、いくつかのキャッシュロジックを自分で構築する必要があります)。

  2. および3.ほとんどのキャッシュキーは文字列で作成されます。そうであれば、型、メソッド、およびパラメータを何らかの形で文字列に変換する必要があります。

関連する問題