成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

使用.net core 自帶DI框架實現延遲加載功能

瀏覽:463日期:2022-06-09 08:14:28

在某些情況,我們希望能延遲一個依賴的初始化。如果使用的是autofac,我們可以通過注入Lazy來實現。

我們對 autofac GitHub上提供的一個例子進行進行簡單改造,跑起來看看。
原Example的鏈接https://github.com/autofac/Examples/tree/master/src/AspNetCoreExample

微改后的代碼

[Route("api/[controller]")]
public class ValuesController : Controller
{
    private readonly Lazy<IValuesService> _valuesService;

    public ValuesController(Lazy<IValuesService> valuesService)
    {
_valuesService = valuesService;
    }

    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
// Kestrel模式下這里會輸出false,實例尚未創建
Console.WriteLine(_valuesService.IsValueCreated); 
// 調用Lazy<T>的Value屬性才真正創建實例
return this._valuesService.Value.FindAll();
    }
}

直到目前core2.1版本,自帶的DI依舊未支持延遲加載,如果我們嘗試在使用自帶DI的情況下套用上述代碼,會得到一個異常,例如:

An unhandled exception occurred while processing the request.

InvalidOperationException: Unable to resolve service for type 'System.Lazy`1[WebApplication9.Services.IValuesService]' while attempting to activate 'WebApplication9.Controllers.ValuesController'.

Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)

如何利用core自帶的DI實現呢?如果我們嘗試百度,可能會搜到類似下面的答案。

services.AddTransient(typeof(Lazy<>));

那么這樣的做法是否能解決我們的問題呢,為了簡化演示代碼。我們創建一個控制臺程序并引用Microsoft.Extensions.DependencyInjection。

class Program
{
    static void Main(string[] args)
    {
var services = new ServiceCollection();
services.AddScoped<ITestService, TestService>();
services.AddTransient(typeof(Lazy<>));

var serviceProvider = services.BuildServiceProvider();

using (var scope = serviceProvider.CreateScope() )
{
    var service = scope.ServiceProvider.GetService<Lazy<ITestService>>();
    // 這邊令人遺憾地輸出了true,也就是說,這種方式的延遲注入是失敗的
    Console.WriteLine(service.IsValueCreated);
}
    }
}

在查閱Stack Overflow的時候,我看到了這樣的解決方案,感覺還是挺簡單實用的,分享給大家。

原貼地址:https://stackoverflow.com/questions/44934511/does-net-core-dependency-injection-support-lazyt

public class LazyLoader<T> : Lazy<T>
{
    public LazyLoader(IServiceProvider sp) : base(sp.GetRequiredService<T>)
    {
    }
}

class Program
{
    static void Main(string[] args)
    {
var services = new ServiceCollection();
services.AddScoped<ITestService, TestService>();
// services.AddScoped(typeof(Lazy<>), typeof(LazyLoader<>)); 也可以,區別不大
services.AddTransient(typeof(Lazy<>), typeof(LazyLoader<>));

var serviceProvider = services.BuildServiceProvider();

using (var scope = serviceProvider.CreateScope())
{
    var service = scope.ServiceProvider.GetService<Lazy<ITestService>>();
    Console.WriteLine(service.IsValueCreated); // 輸出false

    // 下面輸出true,延遲注入的對象和正常注入的對象,本質上不會有差別
    Console.WriteLine(service.Value == scope.ServiceProvider.GetService<ITestService>());
}
    }
}

實現原理比較簡單,在LazyLoader中注入ServiceProvider,調用父類的Value屬性時會執行委托,從ServiceProvider中獲取到對應得依賴實例。

到此這篇關于使用.net core 自帶DI框架實現 延遲加載的文章就介紹到這了,更多相關.net core 延遲加載內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: ASP.NET
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美日韩国内| 国产美女精品| 久久精品伊人| 一区视频在线播放| 丁香五精品蜜臀久久久久99网站| 日本久久一区二区| 亚洲国产另类av| 亚洲精品一区二区三区av| 国产精品天干天干在观线| www.一区二区| 91麻豆精品91久久久久同性| 免费国产亚洲视频| 裸体一区二区| 丝袜亚洲另类欧美综合| 久久三级福利| 日韩影院在线观看| 久久精品官网| 亚洲午夜国产一区99re久久| 国产欧美日韩在线播放| 国产精品久久久久久久第一福利| 97精品久久久久中文字幕| 欧美一区二区在线播放| 国产美女久久久久| 51精品视频一区二区三区| 国产一区二区三区免费看| 欧美高清性hdvideosex| 国产一区二区在线免费观看| 欧美日韩成人高清| 精品伊人久久久久7777人| 欧美精品在线观看一区二区| 国产精品资源在线看| 欧美日韩亚洲丝袜制服| 麻豆精品久久精品色综合| 日本丰满少妇一区二区三区| 日韩中文字幕91| 欧美伊人久久久久久午夜久久久久| 日韩综合小视频| 色94色欧美sute亚洲线路二| 日韩国产精品大片| 欧美日韩免费观看一区二区三区| 精品在线免费视频| 欧美岛国在线观看| 欧美久久久久久久| 亚洲激情图片一区| 久久久久网址| 国产呦精品一区二区三区网站| 欧美精品自拍偷拍| 成人福利视频在线看| www国产成人| 国产精品yjizz| 一区二区三区四区中文字幕| 久久精品中文| 极品美女销魂一区二区三区免费| 日韩一卡二卡三卡四卡| 91一区二区在线| 亚洲色图一区二区| 色伊人久久综合中文字幕| 毛片不卡一区二区| 日韩欧美国产不卡| 欧美在线影院| 亚洲综合网站在线观看| 在线区一区二视频| 成人免费视频一区| 国产精品福利一区二区| 嫩草成人www欧美| 国产一区二区在线影院| 国产欧美日韩亚州综合| 国产精品资源| 久久66热偷产精品| 久久久欧美精品sm网站| 国产欧美日韩伦理| 国产在线视视频有精品| 亚洲国产精品t66y| 蜜乳av另类精品一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品一区二区久久精品爱涩| 久久蜜桃一区二区| 国产精品推荐精品| 高清不卡一区二区在线| ●精品国产综合乱码久久久久 | 久久综合九色综合久久久精品综合| 亚洲国产一区二区精品专区| 久久激五月天综合精品| 久久免费偷拍视频| 久久经典综合| 99精品视频一区二区三区| 亚洲综合色区另类av| 9191成人精品久久| 亚洲图片在线观看| 日韩av网站在线观看| 久久久美女艺术照精彩视频福利播放| 国产农村妇女毛片精品久久莱园子 | 国产精品毛片va一区二区三区| 精品一区二区三区在线观看 | 欧美丰满美乳xxx高潮www| 亚洲图片欧洲图片日韩av| 开心九九激情九九欧美日韩精美视频电影| 日韩一区二区三区精品视频| 亚洲成人在线| 国产福利91精品| 亚洲综合激情网| 日韩欧美色综合| 亚洲影院在线| 99精品1区2区| 蜜臀91精品一区二区三区 | 秋霞午夜av一区二区三区| 久久久亚洲精品石原莉奈| 久久精品人人| 欧美91视频| 精品无人码麻豆乱码1区2区 | 日韩精品1区2区3区| 久久免费国产精品| 欧美日韩国产一二三| 最新日韩欧美| 成人黄色片在线观看| 亚洲成人免费视| 久久精品免视看| 欧美日免费三级在线| 亚洲清纯自拍| av午夜精品一区二区三区| 日本不卡一二三区黄网| 国产精品国产自产拍高清av| 91精品久久久久久久91蜜桃| 男人的天堂亚洲| 亚洲一级特黄| eeuss国产一区二区三区| 美女网站在线免费欧美精品| 自拍偷拍亚洲综合| 久久综合九色欧美综合狠狠 | 雨宫琴音一区二区在线| 丁香网亚洲国际| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲美女在线一区| 国产午夜精品久久| 欧美高清视频一二三区 | 久久久不卡网国产精品二区| 欧美群妇大交群中文字幕| 久久精品日产第一区二区| 在线播放一区| 99久久伊人久久99| 国产一区欧美二区| 男人的天堂亚洲一区| 亚洲精品v日韩精品| 久久精品视频在线看| 日韩一区二区免费在线电影 | 欧美日本在线播放| 老司机午夜精品视频| 亚洲精选在线| 欧美日韩一区二区高清| eeuss鲁片一区二区三区在线观看| 韩国精品在线观看| 日本欧美韩国一区三区| 亚洲成人资源网| 亚洲精品免费播放| 国产精品久久久久久久久免费相片 | 国产一区中文字幕| 蜜臀av性久久久久蜜臀aⅴ| 亚洲一卡二卡三卡四卡| 中文字幕日韩精品一区| 久久看人人爽人人| 精品国产乱码久久久久久免费| 欧美一区三区四区| 欧美精品乱人伦久久久久久| 色婷婷久久99综合精品jk白丝| 国产精品美女久久久浪潮软件| 午夜精品短视频| 97精品视频在线观看自产线路二| 久久se精品一区二区| 日本va欧美va欧美va精品| 午夜精品福利在线| 日韩精品三区四区| 亚洲第四色夜色| 18成人在线观看| 国产精品沙发午睡系列990531| 久久影音资源网| 久久综合久久综合九色| 久久久久久久久久久99999| 欧美sm极限捆绑bd| 欧美xxxxxxxx| 日韩欧美色电影| 精品国产麻豆免费人成网站| 日韩精品综合一本久道在线视频| 在线播放视频一区| 91精品啪在线观看国产60岁| 欧美丰满高潮xxxx喷水动漫| 91精品国产福利在线观看| 欧美一区二区久久| 91精品蜜臀在线一区尤物| 日韩一区二区中文字幕| 精品捆绑美女sm三区| 日韩精品中文字幕在线不卡尤物 | a91a精品视频在线观看| 欧美日韩在线一二三| 99国内精品久久| 91美女视频网站| 亚洲手机视频| 亚洲激情欧美| 一区二区高清| 亚洲综合二区| 日本韩国欧美在线|