2017-02-13 93 views
0

所以我想創建一些訪問外部API的服務,並且我想緩存來自該服務內部的API的常見請求,這取決於3個其他服務,但是我想給它自己的實例緩存,MemoryDistributedCache稍後可能被別的東西aspnetcore的方式是否正確?服務和依賴注入

services.AddSingleton<ISomeApi, SomeApi>(provider => new SomeApi(
    Configuration.Get<Options>(), 
    new MemoryDistributedCache(new MemoryCache(new MemoryCacheOptions())), 
    provider.GetService<ILogger<SomeApi>>() 
    )); 
現在從我的控制器

我可以通過DI訪問API改變,它很好地工作,但林不知道,如果它的某種反模式,或者如果有更好的方法做到這一點

我的意思是真正的問題是分離內部緩存,請求 IDistributedMemory從一個服務w應該給我相同的對象,好像我從另一個服務請求它們,他們必須分開

+1

爲什麼它需要成爲單獨的緩存?另外,請注意:如果服務未找到,GetService ()返回null。所以如果你的服務真的需要記錄器,使用'GetRequiredService ()'。 – juunas

+0

可以說一個緩存由一個數據庫系統支持,第二個緩存由另一個數據庫系統支持 – gdpm

回答

1

這聽起來像是你可以使用代理或裝飾模式。基本的問題是,你有一個服務來完成一些數據訪問,另一個服務負責緩存第一個服務的結果。我意識到你並沒有使用版本庫本身,但儘管如此,CachedRepository模式應該可以滿足您的需求。在這裏看到:

http://ardalis.com/introducing-the-cachedrepository-patternhttp://ardalis.com/building-a-cachedrepository-via-strategy-pattern

你可以寫你的緩存實現這樣的,它需要在其構造實際SomeApi類型,如果你不需要設計的那部分要靈活。