您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“如何使用ASP.NET的Core注入框架”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一、IoC框架
二、IoC-Autofac
三、.NET Core中自帶DI的使用
四、Autofac 使用
五、批量注入
先說說常見的Ioc框架吧。Autofac:
目前net
用的比較多,好多大佬的項(xiàng)目比較優(yōu)先選擇的框架。Ninject:
已經(jīng)很少用了,還時(shí)在很早的文章中見過。Unity:
比較常見的了,好多地方有用到的,Core: Core
中自帶的,業(yè)務(wù)邏輯不太復(fù)雜的情況下,還是比較方便的。
Autofac
是.NET
領(lǐng)域最為流行的IOC
框架之一,傳說是速度最快的一個(gè)。
優(yōu)點(diǎn):
它是C#語言聯(lián)系很緊密,也就是說C#里的很多編程方式都可以為Autofac
使用。
較低的學(xué)習(xí)曲線,學(xué)習(xí)它非常的簡單,只要你理解了IoC
和DI的概念以及在何時(shí)需要使用它們。
XML.Json
配置支持。
自動(dòng)裝配。
與Asp.Net MVC
集成。
微軟的Orchad
開源程序使用的就是Autofac
,從該源碼可以看出它的方便和強(qiáng)大。
大多數(shù)講Autofac
框架的文章中都會(huì)提及上面幾點(diǎn)優(yōu)點(diǎn),可見其框架的優(yōu)秀。
1.首先創(chuàng)建一個(gè) ASP.Net Core Web Api
項(xiàng)目(選用的.NET 5.0),整體如下,紅色部分為Core中自帶DI使用的部分。
2.新建類庫項(xiàng)目,分別添加一個(gè)接口文件和類文件。
接口:
public interface ISayHelloService { string SayHello(string name); }
類:
public class EnglishSayHelloService : ISayHelloService { public string SayHello(string name) { return $"Hello,{name}!"; } }
3.在 Startup
里面的 ConfigureServices
方法內(nèi)注入。
services.AddScoped<ISayHelloService, EnglishSayHelloService>();
4.然后在控制器中使用剛剛注入的服務(wù)。
[Route("api/[controller]/[action]")] [ApiController] public class HelloController : ControllerBase { public readonly ISayHelloService sayHelloService; public HelloController(ISayHelloService sayHelloService) { this.sayHelloService = sayHelloService; } [HttpGet] public string CoreDI() { return sayHelloService.SayHello("CoreDI"); } }
注意: 路由訪問地址,出現(xiàn)404錯(cuò)誤時(shí),可能是路由問題,路由可根據(jù)自己的實(shí)際需要自己在[Route("api/[controller]/[action]")]處修改。
5.訪問測試。
這里使用的接口測試軟件是Postman
,Api測試很方便,網(wǎng)上可以搜索到,找不到我到的可以聯(lián)系我。
1.在新建一個(gè)ASP.Net Core Web Api
項(xiàng)目(選用的.NET 5.0)用于區(qū)分前面的Core自帶的DI。
2.引用引用 Autofac
的包,看看這下載量,還是很哇塞的
3.在 Program
中改用 Autofac
來實(shí)現(xiàn)依賴注入
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
4.在 Startup 類中添加方法:ConfigureContainer
,注入我們之前的服務(wù)。
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddControllers(); } //在這里注入 public void ConfigureContainer(ContainerBuilder builder) { builder.RegisterType<EnglishSayHelloService>().As<ISayHelloService>(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }
5.控制器這里基本不需要更改。
[Route("api/[controller]/[action]")] [ApiController] public class HelloController : ControllerBase { public readonly ISayHelloService sayHelloService; public HelloController(ISayHelloService sayHelloService) { this.sayHelloService = sayHelloService; } [HttpGet] public string CoreDI() { return sayHelloService.SayHello("AutofacDI"); } }
6.運(yùn)行項(xiàng)目繼續(xù)用Postman測試接口。
好了關(guān)于Autofac
的基本使用基本就講完了,是不是還是挺簡單的。
簡單的幾個(gè)服務(wù)寫著還可以接受,當(dāng)服務(wù)到幾十個(gè),甚至上百個(gè)時(shí),想想就可怕。這就不得不說到批量注入了,Autofac的優(yōu)勢就體現(xiàn)出來了。
1.在服務(wù)中分別在添加一個(gè)接口,和類。
接口:
public interface IUseAutofacService { string UseAutofac(string name); }
類:
public class UseAutofacService : IUseAutofacService { public string UseAutofac(string name) { return $"{name}批量注入測試!"; } }
2.回到我們之前的Startup 類中修改方法:ConfigureContainer
。
public void ConfigureContainer(ContainerBuilder builder) { //builder.RegisterType<EnglishSayHelloService>().As<ISayHelloService>(); //服務(wù)項(xiàng)目程序集 Assembly service = Assembly.Load("Autofac.Service"); //服務(wù)接口項(xiàng)目程序集 Assembly iservice = Assembly.Load("Autofac.Service"); builder.RegisterAssemblyTypes(service, iservice).Where(n => n.FullName.EndsWith("Service") && !n.IsAbstract) .InstancePerLifetimeScope().AsImplementedInterfaces(); }
注意: 如果需要注入的服務(wù)沒有 IXXXService
的接口 ,那么 builder.RegisterAssemblyTypes
就只需要傳一個(gè)程序集。如果服務(wù)與接口同在一個(gè)項(xiàng)目,那也是要傳兩個(gè)程序集的。
3.接下來在剛剛的控制器中略作修改。
[Route("api/[controller]/[action]")] [ApiController] public class HelloController : ControllerBase { public readonly ISayHelloService sayHelloService; public readonly IUseAutofacService useAutofacService; public HelloController(ISayHelloService _sayHelloService, IUseAutofacService _useAutofacService) { this.sayHelloService = _sayHelloService; this.useAutofacService = _useAutofacService; } [HttpGet] public string AutofacDI() { return sayHelloService.SayHello("AutofacDI"); } public string BathAutofacDI() { var name = sayHelloService.SayHello("AutofacDI"); return useAutofacService.UseAutofac(name); } }
4.用Postman
測試注入的情況。
“如何使用ASP.NET的Core注入框架”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。