2012-07-25 78 views
2

接口簽名我有緩存的東西一個簡單的接口,它是這樣的無法確定功能

public interface ICacheService 
{ 

     T Get<T>(string cacheId, Func<T> getItemCallback) where T : class; 
} 

,這適用於簡單的回調函數,但在我來說,我需要添加一些更復雜一點。我認爲這是一個匿名類型...

在控制器我注入運行一個查詢,這是這樣一種服務:

this.queryContainer.Get<ObjectQuery>().Execute(new ObjectParameters(id)); 

當然這個的,但類型是Func鍵的不那麼如果編譯器抱怨說,我嘗試使用我的緩存服務。

我需要什麼樣的接口才能讓緩存工作? 理想我想這樣做:

this.cachingService.Get<ObjectResult>(id, this.queryContainer.Get<ObjectQuery>().Execute(new ObjectParameters(id))); 

它甚至有可能?

任何幫助,非常感謝!

非常感謝

+0

'... Execute(new ObjectParameters(id))。Single()'? – mellamokb 2012-07-25 17:16:32

回答

2

你只需要它表現爲Func<T>? 試試這個:

this.cachingService.Get<ObjectResult>(id,()=> this.queryContainer.Get<ObjectQuery>().Execute(new ObjectParameters(id))); 
+0

這樣做。很簡單! – Nick 2012-07-26 09:20:40

1

你可以使用lambda函數。

() => this.queryContainer... 

它將您的代碼包裝在一個沒有參數的函數中返回一個值。因此,它滿足了Func的合同