2017-08-18 40 views
2

我正在使用Unity作爲IOC。如何將System.Web.Cache傳遞到我的服務層

在我的服務層,我想在我的類中使用System.Web.Cache。

我應該只是將它作爲參數傳遞,Unity會自動將它作爲參數傳遞?

例如:

public class UserService 
{ 
    public UserService(System.Web.Caching.Cache cache) 
    { 
    _cache = cache; 
    } 
} 
+0

爲什麼不在問之前先測試代碼? –

+0

@ManpritSinghSahota我做了,參數緩存爲空。 –

+0

在WPF應用程序中使用System.Web可能是一種不好的做法。爲此使用'System.Runtime.Cache'命名空間。我已經爲此添加了答案。希望它對你有幫助。 :) –

回答

1

您應該使用System.Runtime.Caching。它專門用於處理Object的緩存。 NopCommerce對此有很好的實施。你應該創建像的CacheManager:

/// <summary> 
    /// Cache manager interface 
    /// </summary> 
    public interface ICacheManager 
    { 
     /// <summary> 
     /// Gets or sets the value associated with the specified key. 
     /// </summary> 
     /// <typeparam name="T">Type</typeparam> 
     /// <param name="key">The key of the value to get.</param> 
     /// <returns>The value associated with the specified key.</returns> 
     T Get<T>(string key); 

     /// <summary> 
     /// Adds the specified key and object to the cache. 
     /// </summary> 
     /// <param name="key">key</param> 
     /// <param name="data">Data</param> 
     /// <param name="cacheTime">Cache time</param> 
     void Set(string key, object data, int cacheTime); 

     /// <summary> 
     /// Gets a value indicating whether the value associated with the specified key is cached 
     /// </summary> 
     /// <param name="key">key</param> 
     /// <returns>Result</returns> 
     bool IsSet(string key); 

     /// <summary> 
     /// Removes the value with the specified key from the cache 
     /// </summary> 
     /// <param name="key">/key</param> 
     void Remove(string key); 

     /// <summary> 
     /// Removes items by pattern 
     /// </summary> 
     /// <param name="pattern">pattern</param> 
     void RemoveByPattern(string pattern); 

     /// <summary> 
     /// Clear all cache data 
     /// </summary> 
     void Clear(); 
    } 

然後你就可以實現與的MemoryCache的的ICacheManager接口或任何其它高速緩存管理器一樣RedisCache如下:

/// <summary> 
    /// Represents a MemoryCacheCache 
    /// </summary> 
    public partial class MemoryCacheManager : ICacheManager 
    { 
     protected ObjectCache Cache 
     { 
      get 
      { 
       return MemoryCache.Default; 
      } 
     } 

     /// <summary> 
     /// Gets or sets the value associated with the specified key. 
     /// </summary> 
     /// <typeparam name="T">Type</typeparam> 
     /// <param name="key">The key of the value to get.</param> 
     /// <returns>The value associated with the specified key.</returns> 
     public virtual T Get<T>(string key) 
     { 
      return (T)Cache[key]; 
     } 

     /// <summary> 
     /// Adds the specified key and object to the cache. 
     /// </summary> 
     /// <param name="key">key</param> 
     /// <param name="data">Data</param> 
     /// <param name="cacheTime">Cache time</param> 
     public virtual void Set(string key, object data, int cacheTime) 
     { 
      if (data == null) 
       return; 

      var policy = new CacheItemPolicy(); 
      policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime); 
      Cache.Add(new CacheItem(key, data), policy); 
     } 

     /// <summary> 
     /// Gets a value indicating whether the value associated with the specified key is cached 
     /// </summary> 
     /// <param name="key">key</param> 
     /// <returns>Result</returns> 
     public virtual bool IsSet(string key) 
     { 
      return (Cache.Contains(key)); 
     } 

     /// <summary> 
     /// Removes the value with the specified key from the cache 
     /// </summary> 
     /// <param name="key">/key</param> 
     public virtual void Remove(string key) 
     { 
      Cache.Remove(key); 
     } 

     /// <summary> 
     /// Removes items by pattern 
     /// </summary> 
     /// <param name="pattern">pattern</param> 
     public virtual void RemoveByPattern(string pattern) 
     { 
      var regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase); 
      var keysToRemove = new List<String>(); 

      foreach (var item in Cache) 
       if (regex.IsMatch(item.Key)) 
        keysToRemove.Add(item.Key); 

      foreach (string key in keysToRemove) 
      { 
       Remove(key); 
      } 
     } 

     /// <summary> 
     /// Clear all cache data 
     /// </summary> 
     public virtual void Clear() 
     { 
      foreach (var item in Cache) 
       Remove(item.Key); 
     } 
    } 

回顧這NopCommerce link瞭解更多詳情。在Unity中註冊ICacheManager以爲MemoryCacheManager創建對象並在您的應用程序中使用它。快樂編碼:)

相關問題