2012-04-14 85 views
0

任何人都可以提供一個如何與溫莎城堡緩存工作的例子。與溫莎城堡AOP緩存

我相信作爲一個起點,我定義我CacheAspect從IInterceptor繼承如下:

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() 
    { 
    } 

..和當然在Windsor容器中註冊整個東西。

但是......

  1. 我如何可以改變的時間我想在每個方法調用我的緩存東西的多少?在這個例子中,我可能希望它被緩存60分鐘。對於其他例子一天等等等。我必須爲每個緩存持續時間創建CacheAspect嗎?

  2. 從每種方法中識別每個緩存值的最佳方法是什麼?例如,使用invocation.TargetType.Nameinvocation.Method.Name的組合?

  3. 在問題2上展開 - 如果傳入了參數會怎麼樣?然後,我需要確定是否已緩存匹配特定參數集的數據。

謝謝。

回答

0

我建立mbcache,http://code.google.com/p/mbcache,前一段時間使用動態代理來啓用緩存。它在內部處理你的問題。在源代碼中有使用Castle Windsor(和LinFu)的實現。看看它(或者如果它適合你的需求,直接使用框架)。

簡短回答您的問題

  1. AFAIK - 溫莎(或其他代理FW)不具有任何內置該支持。你需要使用一些緩存框架(或者自己構建一些緩存邏輯,例如使用弱引用)。

  2. 和3.大多數緩存鍵都建立在字符串上。如果是這樣 - 你需要以某種方式將類型,方法和參數轉換爲字符串。