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

 更新时间:2021年10月11日 16:10:31   作者:故人与猫  
还记得上篇文章中最后提及到,假如服务越来越多怎么处理呢,本篇文章将会带来解决办法, ASP.NET Core 依赖注入框架的相关资料,需要的小伙伴可以参考下面文章的具体内容

前言:

还记得上篇文章中ASP.NET Core 依赖注入详细最后提及到,假如服务越来越多怎么处理呢,本篇文章将会带来解决办法。这篇是接上一篇文章的,概念方面的可以参考上一篇文章。

一、IoC框架

先说说常见的Ioc框架吧。
Autofac: 目前net用的比较多,好多大佬的项目比较优先选择的框架。
Ninject: 已经很少用了,还时在很早的文章中见过。
Unity: 比较常见的了,好多地方有用到的,
Core: Core中自带的,业务逻辑不太复杂的情况下,还是比较方便的。

二、IoC-Autofac

Autofac.NET领域最为流行的IOC框架之一,传说是速度最快的一个。

优点:

  • 它是C#语言联系很紧密,也就是说C#里的很多编程方式都可以为Autofac使用。
  • 较低的学习曲线,学习它非常的简单,只要你理解了IoC和DI的概念以及在何时需要使用它们。
  • XML.Json配置支持。
  • 自动装配。
  • Asp.Net MVC 集成。
  • 微软的Orchad开源程序使用的就是Autofac,从该源码可以看出它的方便和强大。

大多数讲Autofac框架的文章中都会提及上面几点优点,可见其框架的优秀。

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

1.首先创建一个 ASP.Net Core Web Api项目(选用的.NET 5.0),整体如下,红色部分为Core中自带DI使用的部分。

2.新建类库项目,分别添加一个接口文件和类文件。

接口:

    public interface ISayHelloService
    {
        string SayHello(string name);
    }


类:

    public class EnglishSayHelloService : ISayHelloService
    {
        public string SayHello(string name)
        {
            return $"Hello,{name}!";
        }
    }

3.在 Startup 里面的 ConfigureServices 方法内注入。

 services.AddScoped<ISayHelloService, EnglishSayHelloService>();

4.然后在控制器中使用刚刚注入的服务。

    [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");
        }

    }

注意: 路由访问地址,出现404错误时,可能是路由问题,路由可根据自己的实际需要自己在[Route("api/[controller]/[action]")]处修改。

5.访问测试。

这里使用的接口测试软件是Postman,Api测试很方便,网上可以搜索到,找不到我到的可以联系我。

四、Autofac 使用

1.在新建一个ASP.Net Core Web Api项目(选用的.NET 5.0)用于区分前面的Core自带的DI。

2.引用引用 Autofac 的包,看看这下载量,还是很哇塞的

3.在 Program 中改用 Autofac 来实现依赖注入

    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,注入我们之前的服务。

   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.运行项目继续用Postman测试接口。

好了关于Autofac的基本使用基本就讲完了,是不是还是挺简单的。

五、批量注入

简单的几个服务写着还可以接受,当服务到几十个,甚至上百个时,想想就可怕。这就不得不说到批量注入了,Autofac的优势就体现出来了。

1.在服务中分别在添加一个接口,和类。

接口:

   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>();

           //服务项目程序集
           Assembly service = Assembly.Load("Autofac.Service");
          
           //服务接口项目程序集
           Assembly iservice = Assembly.Load("Autofac.Service");

           builder.RegisterAssemblyTypes(service, iservice).Where(n => n.FullName.EndsWith("Service") && !n.IsAbstract)
               .InstancePerLifetimeScope().AsImplementedInterfaces();

       }

注意: 如果需要注入的服务没有 IXXXService的接口 ,那么 builder.RegisterAssemblyTypes 就只需要传一个程序集。如果服务与接口同在一个项目,那也是要传两个程序集的。

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  依赖注入框架的使用的文章就介绍到这了,更多相关 ASP.NET Core  依赖注入框架内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ASP.NET Core如何注入多个服务实现类

    ASP.NET Core如何注入多个服务实现类

    这篇文章主要介绍了ASP.NET Core如何注入多个服务实现类的相关资料,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • .NET 6 中的隐式命名空间引用

    .NET 6 中的隐式命名空间引用

    这篇文章小编主要向大家介绍的是介绍了.NET 6 中的隐式命名空间引用,其正式版发布之前会专注于各种测试和 BUG 修复,下面就由小编来详细介绍吧,感兴趣的小伙伴可以参考下文
    2021-09-09
  • C#与.net高级编程 C#的多态介绍

    C#与.net高级编程 C#的多态介绍

    封装、继承、多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了
    2012-11-11
  • 认识ASP.NET配置文件Web.config

    认识ASP.NET配置文件Web.config

    Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中
    2006-07-07
  • ASP.NET Core MVC 依赖注入View与Controller

    ASP.NET Core MVC 依赖注入View与Controller

    本文重点给大家介绍的是ASP.NET Core MVC 之依赖注入 View 和ASP.NET Core MVC 之依赖注入 Controller的相关资料,需要的小伙伴可以参考下面文章具体内容
    2021-09-09
  • ABP入门系列应用BootstrapTable表格插件

    ABP入门系列应用BootstrapTable表格插件

    Bootstrap table是一个开源的轻量级功能非常丰富的前端表格插件。下面通过本文给大家介绍ABP入门系列应用BootstrapTable表格插件,感兴趣的朋友一起学习吧
    2017-03-03
  • ASP.NET通过Web.config实现验证账号密码是否正确进行登录

    ASP.NET通过Web.config实现验证账号密码是否正确进行登录

    本文是通过authentication(认证访问者) 和 authorization( 访问权限),来实现一个简单的判断用户账号密码是否正确,需要的朋友可以参考下
    2021-09-09
  • C#中string与byte[]的转换帮助类-.NET教程,C#语言

    C#中string与byte[]的转换帮助类-.NET教程,C#语言

    在写c#程序时,string和byte[]之间的转换比较烦,在移植一些老程序时感觉很不好。我在c#中使用des和tripledes时移植一块老代码时也遇到了同样的情况。为了下次不为同样的事情烦恼,就写了下面的帮助类。
    2008-03-03
  • ASP.net中md5加密码的方法

    ASP.net中md5加密码的方法

    ASP.net中md5加密码的方法...
    2006-07-07
  • .Net Core 之AutoFac的使用

    .Net Core 之AutoFac的使用

    本文简单介绍了AutoFac的基本使用以及在asp .net core中的应用,文中通过代码讲解相关知识非常的详细,对大家的学习或工作都很有帮助,感兴趣的小伙伴可以参考一下这篇文章
    2021-09-09

最新评论