温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用ASP.NET的Core注入框架

发布时间:2021-10-11 21:10:13 来源:亿速云 阅读:207 作者:iii 栏目:开发技术

本篇内容介绍了“如何使用ASP.NET的Core注入框架”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 一、IoC框架

  • 二、IoC-Autofac

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

  • 四、Autofac 使用

  • 五、批量注入

一、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使用的部分。

如何使用ASP.NET的Core注入框架

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.访问测试。

如何使用ASP.NET的Core注入框架

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

四、Autofac 使用

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

如何使用ASP.NET的Core注入框架

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

如何使用ASP.NET的Core注入框架

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注入框架”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI