[英]Format FilterAttribute result using Strategy Pattern in ASP.NET Core
[英]Strategy Pattern with ASP.Net Core DI
在構建我的Rest API時,我偶然發現了基於這篇文章構建一個Cached Repository。
我喜歡這個主意,因為代碼看起來很干凈。 所以我去試了一下,實施非常好。
但是現在我想連接我的DI(標准的Microsoft DI與ASP.Net Core一起推出並沒什么特別的),我在那里面臨一些麻煩。
基本上問題是我有多個相同接口的實現,而緩存實現引用了直接實現,如下所示:
public class CachedArticleRepository : IArticleRepository
{
public CachedArticleRepository(IArticleRepository article, IMemoryCache cache)
{
_article = article;
_cache = cache;
}
}
public class ArticleRepository : IArticleRepository
{
public ArticleRepository(IAmbientContextLocator locator)
{
_locator = locator;
}
}
我在我的服務中使用它(如文章所解釋),如下所示:
public class DivisionService : IDivisionService
{
public DivisionService(IArticleRepository article)
{
_article = article;
}
}
我現在的問題是如何配置DI以便非緩存變量用於構建緩存存儲庫,而緩存存儲庫用於其他所有內容?
注冊服務時使用工廠代理過載
//...
services.AddScoped<ArticleRepository>();
services.AddScoped<IArticleRepository, CachedArticleRepository>(serviceProvider => {
IArticleRepository nonCachedVarient = serviceProvider.GetService<ArticleRepository>();
IMemoryCache cache = serviceProvider.GetService<IMemoryCache>();
return new CachedArticleRepository (nonCachedVarient, cache);
});
//...
這樣,Non Cached Variant用於構建Cached Repository,Cached Repository用於其他所有內容。
上面的代碼假定所有其他依賴項都添加到服務集合中。
CachedArticleRepository
注冊為IArticleRepository
因此只要需要該依賴項,就會解析它。
您可以根據需要更改使用壽命。 AddScoped
僅用於演示注冊過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.