日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

如何在.net6webapi中使用自動依賴注入

瀏覽:24日期:2022-06-14 13:25:21
目錄IOC/DI如何在.net6webapi中使用依賴注入?怎么實現自動注入?IOC/DI

IOC(Inversion of Control)控制反轉:控制反正是一種設計思想,旨在將程序中的控制權從程序員轉移到了容器中。容器負責管理對象之間的依賴關系,使得對象不再直接依賴于其他對象,而是通過依賴注入的方式來獲取所需的資源。

DI(Dependency Injection)依賴注入:他是IOC的具體實現方式之一,使用最為廣泛,DI通過在運行時動態地將某個依賴關系抽象為獨立的組件,提交到容器之中,需要使用時再由容器注入,提升組件重用的頻率,為系統搭建一個靈活,可擴展的平臺。

IOC/DI是一種設計模式,用于解耦組件之間的依賴關系。在傳統的編程模式中,組件之間的依賴關系是硬編碼在代碼中的,這樣會導致代碼的耦合度很高,難以維護和發展。而IOC/DI模式則是通過將組件之間的依賴關系交給容器來管理,組件不再直接依賴其他組件,而是通過容器來獲取所依賴的對象。這樣可以使組件之間的依賴關系更加靈活,容器可以根據需要動態地創建和管理組件,從而實現更好的可維護性和可擴展性。

如何在.net6webapi中使用依賴注入?

首先我們定義一個服務接口及對應的實現

public interface ITestServices {int return123(); } public class TestServices : ITestServices {public int return123(){ return 123;} }

然后我們在Program.cs注入服務實現

var builder = WebApplication.CreateBuilder(args);// Add services to the container.builder.Services.AddControllers();// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();builder.Services.AddTransient<ITestServices, TestServices>();var app = builder.Build();// Configure the HTTP request pipeline.if (app.Environment.IsDevelopment()){ app.UseSwagger(); app.UseSwaggerUI();}app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();

值得注意的是依賴注入有三種生命周期

作用域(Scoped):在應用程序啟動時創建,并在應用程序關閉時銷毀。這種類型的服務實例會被容器管理,但是只會被當前請求使用。當請求結束時,該服務實例會被銷毀。單例(Singleton):在應用程序啟動時創建,并在整個應用程序運行期間保持不變。這種類型的服務實例會被容器管理,并且可以被多個請求共享。瞬時(Transient):在應用程序啟動時創建,并在應用程序關閉時銷毀。這種類型的服務實例不會被容器管理,也不會被其他服務引用。

最后在需要使用的控制器中構造函數注入就可以使用了

[Route('[controller]/[action]')] [ApiController] public class TestController : ControllerBase {private readonly ITestServices _testServices;public TestController(ITestServices testServices){ _testServices= testServices;}[HttpGet]public int Get123() => _testServices.return123(); }

怎么實現自動注入?

依賴注入好歸好,就是每個服務都得在Program.cs注入服務實現,一但服務多起來,麻煩不說,Program.cs中的代碼更是會變得凌亂不堪,可能會有小伙伴說,可以開一個擴展函數單獨做注入,但私以為,既然有一種方法可以一勞永逸,何樂而不為呢?

其實現便是利用.net的高級特性之一,反射

首先我們定義三個生命周期接口,其對應依賴注入的三種生命周期

//瞬時注入服務接口 public interface ITransient { } //作用域注入服務接口 public interface IScoped { } //單例注入服務接口 public interface ISingleton { }

然后我們定義自動注入的擴展方法,其為核心實現

public static IServiceCollection RegisterAllServices(this IServiceCollection services){ //獲取當前程序集 var entryAssembly = Assembly.GetEntryAssembly(); //獲取所有類型 //!. null包容運算符,當你明確知道表達式的值不為null 使用!.(即null包容運算符)可以告知編譯器這是預期行為,不應發出警告 //例: entryAssembly!.GetReferencedAssemblies() 正常 //entryAssembly.GetReferencedAssemblies() 編譯器判斷entryAssembly有可能為null,變量下方出現綠色波浪線警告 var types = entryAssembly!.GetReferencedAssemblies()//獲取當前程序集所引用的外部程序集.Select(Assembly.Load)//裝載.Concat(new List<Assembly>() { entryAssembly })//與本程序集合并.SelectMany(x => x.GetTypes())//獲取所有類.Distinct();//排重 //三種生命周期分別注冊 Register<ITransient>(types, services.AddTransient, services.AddTransient); Register<IScoped>(types, services.AddScoped, services.AddScoped); Register<ISingleton>(types, services.AddSingleton, services.AddSingleton); return services;}/// <summary>/// 根據服務標記的生命周期interface,不同生命周期注冊到容器里面/// </summary>/// <typeparam name='TLifetime'>注冊的生命周期</typeparam>/// <param name='types'>集合類型</param>/// <param name='register'>委托:成對注冊</param>/// <param name='registerDirectly'>委托:直接注冊服務實現</param>private static void Register<TLifetime>(IEnumerable<Type> types, Func<Type, Type, IServiceCollection> register, Func<Type, IServiceCollection> registerDirectly){ //找到所有標記了Tlifetime生命周期接口的實現類 var tImplements = types.Where(x => x.IsClass && !x.IsAbstract && x.GetInterfaces().Any(tinterface => tinterface == typeof(TLifetime))); //遍歷,挨個以其他所有接口為key,當前實現為value注冊到容器中 foreach (var t in tImplements) {//獲取除生命周期接口外的所有其他接口var interfaces = t.GetInterfaces().Where(x => x != typeof(TLifetime));if (interfaces.Any()){ foreach (var i in interfaces) {register(i, t); }}//有時需要直接注入實現類本身registerDirectly(t); }}

其核心邏輯便是通過反射掃描程序集,當掃描到實現了我們定義的生命周期接口時,為其實現對應的生命周期注入。

注冊這個服務

builder.Services.RegisterAllServices();

然后我們就可以通過繼承生命周期接口來實現自動服務注入

public interface ITestServices {int return123(); } public class TestServices : ITestServices, ITransient {public int return123(){ return 123;} }

接下來無需在Program.cs注入服務實現

調用成功。

到此這篇關于如何在.net6webapi中實現自動依賴注入的文章就介紹到這了,更多相關.net6webapi自動依賴注入內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: ASP.NET
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品国产精品| 国产一区精品福利| 99久久亚洲精品蜜臀| 久久不卡国产精品一区二区| 国产调教一区二区三区| 鲁大师精品99久久久| 精品久久久中文字幕| 水蜜桃久久夜色精品一区| 免费污视频在线一区| 亚洲黄色影院| 亚洲区第一页| 国产欧美久久一区二区三区| 国产精品1luya在线播放| 久久精品国产网站| av在线资源| 亚洲精品一区二区妖精| 亚洲精品观看| 欧美激情aⅴ一区二区三区 | 欧美日韩水蜜桃| 99国内精品| 亚洲精品在线a| 国产欧美一区二区精品久久久 | 蜜桃伊人久久| 欧美日一区二区三区在线观看国产免| 国产精品毛片久久久| 麻豆网站免费在线观看| 精品成人免费一区二区在线播放| 午夜久久tv| 91亚洲精品在看在线观看高清| 你懂的网址国产 欧美| 成人精品中文字幕| 亚洲精品一二| 国产精品久久观看| 久热re这里精品视频在线6| 国产美女久久| 成人免费电影网址| 色综合视频一区二区三区日韩 | 精品一区二区三区免费看| 亚洲电影在线| 欧美一级二级视频| 欧洲精品一区二区三区| 在线看片日韩| 色婷婷综合网| av不卡在线| 久久久精品国产**网站| 亚洲精品一区二区妖精| 国产福利一区二区精品秒拍| 欧美 日韩 国产一区二区在线视频 | 国产精品免费精品自在线观看| 日韩高清成人在线| www.com.cn成人| 日韩国产在线不卡视频| 日韩国产网站| 欧美日韩一区二区国产| 免费国产自久久久久三四区久久| 国产欧美亚洲精品a| 欧美日韩一区二区综合| 日韩精品三区四区| 99精品美女| 欧美一级二级视频| 91精品二区| 精品黄色一级片| 亚洲+小说+欧美+激情+另类| 久久激情一区| 精品美女在线视频| 中文字幕免费一区二区| 99热国内精品| 欧美aaaaaa午夜精品| 欧美.日韩.国产.一区.二区 | 亚洲男女自偷自拍| 国产va免费精品观看精品视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产粉嫩在线观看| 国产乱码精品一区二区亚洲| 亚洲欧美不卡| 成人久久一区| 久久在线91| 日本不卡视频一二三区| 在线视频精品| 韩国精品主播一区二区在线观看| 日本成人一区二区| 午夜在线视频观看日韩17c| 人人草在线视频| 欧美激情99| 国产免费av国片精品草莓男男| 伊人久久亚洲| 亚洲一区日本| 91国语精品自产拍| 久久婷婷亚洲| 欧洲一级精品| 裤袜国产欧美精品一区| 国产精品二区影院| 日韩高清电影一区| 亚洲久久视频| 蜜桃视频免费观看一区| 国产真实久久| 日韩电影二区| 久久久男人天堂| 岛国av免费在线观看| 国产videos久久| 国产一区二区三区四区二区| 国产精品18| 免费看久久久| 久久精品国产免费| 嫩呦国产一区二区三区av| 国产精品亚洲产品| 国产精品115| 国产极品一区| 久久精品国产久精国产| 毛片不卡一区二区| 国产乱码精品一区二区三区四区| 日韩有码av| 日韩高清在线一区| 欧美综合精品| 国产精品探花在线观看| 国产精品欧美三级在线观看| 国产精品s色| 久久久91麻豆精品国产一区| 国产精品毛片久久久| 精品一区二区三区中文字幕视频 | 国产福利片在线观看| 伊伊综合在线| 三级精品视频| 伊人精品视频| 国产精品日本欧美一区二区三区| 久久亚洲欧美| 日韩在线电影| 国产精品麻豆成人av电影艾秋| 久久av影视| 91亚洲一区| 1024精品一区二区三区| 99在线精品免费视频九九视 | 日韩大片在线观看| 亚洲二区精品| 国产婷婷精品| 亚洲精品无播放器在线播放| 中文字幕av一区二区三区人| 日韩精品导航| 久久伊人久久| 久久裸体视频| 美女91精品| 奇米亚洲欧美| 成人在线免费观看网站| 久久激情一区| 免费观看日韩电影| 欧美亚洲一级| 精品国产欧美日韩| 91精品在线观看国产| 亚洲免费播放| 日韩精品一页| 加勒比视频一区| 日韩精品午夜| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品magnet| 久久亚洲精品中文字幕蜜潮电影| 免费观看在线综合| 麻豆精品新av中文字幕| 91精品国产福利在线观看麻豆| 免费日韩精品中文字幕视频在线| 欧美日本久久| 欧美中文一区二区| 日韩av不卡一区二区| 麻豆成全视频免费观看在线看| 在线一区视频| 老牛国内精品亚洲成av人片| 亚洲精品午夜av福利久久蜜桃| 亚洲va久久| 正在播放日韩精品| 美国三级日本三级久久99| 免费日韩成人| 91超碰国产精品| 国产精品一线天粉嫩av| 91精品国产成人观看| 日韩av午夜在线观看| 999久久久免费精品国产| 日韩精品五月天| 日韩国产一区二区三区| 日韩在线视频一区二区三区| 日韩中文在线电影| 日韩一区二区三区免费视频| 亚洲va中文在线播放免费| 亚洲久草在线| 蜜桃视频在线网站| 日韩高清不卡在线| 美女网站一区| 捆绑调教美女网站视频一区| 午夜日本精品| 精品国产18久久久久久二百| 亚洲一区二区日韩| 免费一二一二在线视频| 国产毛片一区二区三区| 日韩午夜av在线| 国产精品高颜值在线观看| 日本vs亚洲vs韩国一区三区二区| 在线一区视频观看| 国产精品久久久久久妇女| 99pao成人国产永久免费视频| 国产精品2区| 亚洲精品少妇| 午夜久久免费观看|