.netcore3.1——使用Autofac替换系统依赖注入组件
时间:2020-04-17
本文章向大家介绍.netcore3.1——使用Autofac替换系统依赖注入组件,主要包括.netcore3.1——使用Autofac替换系统依赖注入组件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
.netcore内置依赖注入,通过services.AddTransient、services.AddScoped、services.AddSingleton这些方法即可实现构造函数注入。
Autofac可完美替换系统的依赖注入功能,同时可实现构造函数注入和属性注入,替换过程:
1、添加引用:
2、Program修改:
1 public static IHostBuilder CreateHostBuilder(string[] args) => 2 Host.CreateDefaultBuilder(args) 3 .UseServiceProviderFactory(new AutofacServiceProviderFactory())//集成Autofac 4 .ConfigureWebHostDefaults(webBuilder => 5 { 6 webBuilder.UseStartup<Startup>(); 7 });
这里就加了一行
3、Startup修改:
1 //集成Autofac 2 public void ConfigureContainer(ContainerBuilder builder) 3 { 4 //添加依赖注入实例,AutofacModuleRegister就继承自Autofac.Module的类 5 builder.RegisterModule(new StartupHelp.AutofacModuleRegister()); 6 }
这是新加的方法,由Autofac来调用,里面就是注册依赖的地方,此处使用了外置对象来注入
4、注入实现AutofacModuleRegister如下:
1 public class AutofacModuleRegister : Autofac.Module 2 { 3 protected override void Load(ContainerBuilder builder) 4 { 5 //程序集范围注入 6 builder.RegisterAssemblyTypes(typeof(ManagerService).Assembly) 7 .Where(t => t.Name.EndsWith("Service")) 8 .AsImplementedInterfaces().PropertiesAutowired(); 9 //单个注册 10 builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().PropertiesAutowired(); 11 12 //在控制器中使用属性依赖注入,其中注入属性必须标注为public 13 var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes() 14 .Where(type => typeof(Microsoft.AspNetCore.Mvc.ControllerBase).IsAssignableFrom(type)).ToArray(); 15 builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired(); 16 } 17 }
其中注册类必须继承自Autofac.Module,并且在Load中实现注入,此处应用了程序集范围的注入以及单个对象的注入,最后添加的代码是为了支持控制器的属性注入。
注入对象的生命周期与.netcore内置的一致。
5、使用,可以通过构造函数注入和属性注入,如下:
1 public IManagerService _managerService { get; set; } 2 private readonly ILogger _logger; 3 4 public AccountController(ILogger<AccountController> logger) 5 { 6 _logger = logger; 7 }
其中_logger使用构造函数注入,_managerService为属性注入(应声明为public)。
services.AddTransient
原文地址:https://www.cnblogs.com/quluqi/p/12720320.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)
- Python爬虫之requests模块了解
- Python爬虫之数据提取概述
- Python爬虫之数据提取-jsonpath模块
- 什么是高斯混合模型
- Python爬虫之数据提取-lxml模块
- 用Python读写文件的方法
- 反编译PyInstaller打包后的exe为py源码
- Qt多线程编程实战:MD5单项加密
- 高速上云/网络穿透/视频上云网关EasyNTS组网服务平台如何通过复制穿透结果实现外网到内网的访问?
- SpringBoot常用注解的简单理解
- Qt多线程编程之线程的同步和互斥
- TS 设计模式06 - 代理模式
- TS 设计模式07 - 观察者模式
- Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)