欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core  依賴注入框架的使用

 更新時(shí)間:2021年10月11日 16:10:31   作者:故人與貓  
還記得上篇文章中最后提及到,假如服務(wù)越來越多怎么處理呢,本篇文章將會(huì)帶來解決辦法, ASP.NET Core 依賴注入框架的相關(guān)資料,需要的小伙伴可以參考下面文章的具體內(nèi)容

前言:

還記得上篇文章中ASP.NET Core 依賴注入詳細(xì)最后提及到,假如服務(wù)越來越多怎么處理呢,本篇文章將會(huì)帶來解決辦法。這篇是接上一篇文章的,概念方面的可以參考上一篇文章。

一、IoC框架

先說說常見的Ioc框架吧。
Autofac: 目前net用的比較多,好多大佬的項(xiàng)目比較優(yōu)先選擇的框架。
Ninject: 已經(jīng)很少用了,還時(shí)在很早的文章中見過。
Unity: 比較常見的了,好多地方有用到的,
Core: Core中自帶的,業(yè)務(wù)邏輯不太復(fù)雜的情況下,還是比較方便的。

二、IoC-Autofac

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)秀。

三、.NET Core中自帶DI的使用

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.訪問測(cè)試。

這里使用的接口測(cè)試軟件是Postman,Api測(cè)試很方便,網(wǎng)上可以搜索到,找不到我到的可以聯(lián)系我。

四、Autofac 使用

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測(cè)試接口。

好了關(guān)于Autofac的基本使用基本就講完了,是不是還是挺簡單的。

五、批量注入

簡單的幾個(gè)服務(wù)寫著還可以接受,當(dāng)服務(wù)到幾十個(gè),甚至上百個(gè)時(shí),想想就可怕。這就不得不說到批量注入了,Autofac的優(yōu)勢(shì)就體現(xiàn)出來了。

1.在服務(wù)中分別在添加一個(gè)接口,和類。

接口:

   public interface IUseAutofacService
   {
       string UseAutofac(string name);
   }

類:

   public class UseAutofacService : IUseAutofacService
   {
       public string UseAutofac(string name)
       {
           return $"{name}批量注入測(cè)試!";
       }
   }

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測(cè)試注入的情況。

 

到此這篇關(guān)于 ASP.NET Core  依賴注入框架的使用的文章就介紹到這了,更多相關(guān) ASP.NET Core  依賴注入框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ASP.NET Core MVC 過濾器(Filter)

    ASP.NET Core MVC 過濾器(Filter)

    本文小編要給大家介紹的是ASP.NET Core MVC 過濾器,ASP.NET MVC 中的過濾器允許在執(zhí)行管道中的特定階段之前或之后運(yùn)行代碼。可以對(duì)全局,也可以對(duì)每個(gè)控制器或每個(gè)操作配置過濾器,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • HttpResponse的Output與OutputStream、Filter關(guān)系與區(qū)別介紹

    HttpResponse的Output與OutputStream、Filter關(guān)系與區(qū)別介紹

    在網(wǎng)上經(jīng)??匆娪羞@樣的代碼HttpResponse response = HttpContext.Current.Response;現(xiàn)在我也來說說這幾個(gè)東東是什么吧
    2012-11-11
  • .NET?Core?中對(duì)象池?Object?Pool的使用

    .NET?Core?中對(duì)象池?Object?Pool的使用

    這篇文章主要介紹了?.NET?Core?中對(duì)象池?Object?Pool的使用,對(duì)象池簡單來說就是一種為對(duì)象提供可復(fù)用能力的軟件設(shè)計(jì)思路,對(duì)象池最常用的場景是游戲設(shè)計(jì),因?yàn)樵谟螒蛑写罅看嬖谥蓮?fù)用的對(duì)象,源源不斷的子彈出現(xiàn)并不是循環(huán)再生的,下面一起進(jìn)入文章了解具體內(nèi)容吧
    2021-11-11
  • 簡單實(shí)現(xiàn).NET?Hook與事件模擬實(shí)例

    簡單實(shí)現(xiàn).NET?Hook與事件模擬實(shí)例

    這篇文章主要為大家介紹了簡單實(shí)現(xiàn).NET?Hook與事件模擬實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • .Net 7函數(shù)Ctor與CCtor使用及區(qū)別詳解

    .Net 7函數(shù)Ctor與CCtor使用及區(qū)別詳解

    這篇文章主要為大家介紹了.Net 7函數(shù)Ctor與CCtor使用及區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • .net中線程同步的典型場景和問題剖析

    .net中線程同步的典型場景和問題剖析

    在使用多線程進(jìn)行編程時(shí),有一些經(jīng)典的線程同步問題,對(duì)于這些問題,.net提供了多種不同的類來解決
    2012-11-11
  • 用CSS實(shí)現(xiàn)圖片傾斜 只支持IE

    用CSS實(shí)現(xiàn)圖片傾斜 只支持IE

    用CSS實(shí)現(xiàn)圖片傾斜 只支持IE...
    2007-11-11
  • ASP.NET常用代碼

    ASP.NET常用代碼

    ASP.NET常用代碼...
    2006-06-06
  • 一文透徹詳解.NET框架類型系統(tǒng)設(shè)計(jì)要點(diǎn)

    一文透徹詳解.NET框架類型系統(tǒng)設(shè)計(jì)要點(diǎn)

    這篇文章主要為大家透徹詳解了選擇.NET框架的n個(gè)理由,本系列的第一篇文章全面概述了平臺(tái)的支柱和設(shè)計(jì)要點(diǎn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • ASP.NET學(xué)習(xí)中常見錯(cuò)誤總結(jié)歸納

    ASP.NET學(xué)習(xí)中常見錯(cuò)誤總結(jié)歸納

    這篇文章主要介紹了asp.net學(xué)習(xí)過程中碰到的常見錯(cuò)誤的解決方法,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論