.NET6用起来-Autofac
本文的主角是Autofac,它是一款非常奈斯的依赖注入框架。暂时先不讨论,先分享几个名词:DI(依赖注入)、IOC(控制反转)、IOC容器。
通过Demo,认识这些名词
Demo很简单,创建一个Asp.NET Core项目,新增一个用户服务类(UserService),在默认创建的天气预报(WeatherForecastController)控制器类中调用。
用户服务类(UserService),新增一个简单的GetUser方法
public class UserService{public virtual string GetUser() {Console.WriteLine("执行GetUser方法");return "获取一个用户信息";}}
天气预报(WeatherForecastController)控制器类调用
天气预报(WeatherForecastController)控制器类的get方法如果调用UserService的getUser方法,首先需要通过new创建UserService类的实例,才可以完成调用。
private readonly UserService _userService = new UserService();
那我们可以说天气预报类依赖用户服务类,这样代码实现没问题,软件设计原则,尽量依赖接口,不要依赖具体的实现。
下面创建一个接口类(IUserSerice)
public interface IUserSerice{string GetUser();}
换成接口后,实例化的代码如下
private readonly IUserSerice _userService = new UserService();
我们发现天气预报类依赖用户服务类,用户服务类的实例化的代码都在天气预报类中,实例创建控制权在调用方中,软件设计中,大家常常说高内聚,低耦合,如何进一步解耦呢?把实例创建控制权交出去,这就是控制翻转(IOC)的思想。具体交给谁呢,这个东西像个黑盒,他就是ioc容器,.NETcore框架已经内置了ioc容器框架了,当然我们也可以使用第三方autofac框架。实例的创建,销毁整个生命周期交给了容器,如何获取到实例对象呢,可以通过注入的方式,把我们依赖的对象通过构造函数、属性、方法标记[FromServices]进行注入,这一个过程称为依赖注入(DI)。
我抛砖引玉下,更好的见解,留言区可以分享^_^
Autofac功能一角,也是吸引我的地方
丰富注册(服务组件与实现的配置)方式:①RegisterType、②RegisterAssemblyTypes、③Autofac.Module
注入方式:①构造函数、②属性
生命周期:①瞬时、②单例、③范围
支持AOP(面向切面编程)
Autofac与ASP.NET 6集成重写上面的Demo
1.安装nuget包:Autofac.Extensions.DependencyInjection
2.在Program.cs类中配置
//替换内置的ServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{ containerBuilder.RegisterType<UserService>().As<IUserSerice>().InstancePerLifetimeScope();
});
3.预报天气控制器类,注入、调用
private readonly ILogger<WeatherForecastController> _logger;private readonly IUserSerice userService; public WeatherForecastController(ILogger<WeatherForecastController> logger, IUserSerice userService){_logger = logger; this.userService = userService;}[HttpGet(Name = "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){userService.GetUser();return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}
运行结果
参考官网:https://autofac.readthedocs.io/en/latest/index.html
.NET6用起来-Autofac相关推荐
- .NET6 使用 AutoFac (落地)
一.Net 6环境下的.net core项目里如何使用Autofac实现依赖注入. 通常的,我们把其他服务注入到Controller时,使用.net core自带的依赖注入即可,但是如果我们要实现自定 ...
- 【Blog.Core开源】将Program升级为.NET6.0版本
大家假期好,好久不见,之前忙于其他事情,公众号暂时搁置了一个月了,新的一年开始了,很多小伙伴开始催更了,粉丝的要求必须满足. 2022年打算重点推广BCVP社区,所以还是希望有愿意投稿的小伙伴,积极投 ...
- 详解 .Net6 Minimal API 的使用方式
随着 .Net6 的发布,微软也改进了对之前 ASP.NET Core 构建方式,使用了新的 Minimal API 模式.以前默认的方式是需要在 Startup 中注册 IOC 和中间件相关,但是在 ...
- .NetCore——Autofac使用
.NetCore--Autofac使用 一.介绍 Autofac是一个开源的轻量级的依赖注入容器,也是当下比较流行的实现依赖注入的工具之一. 二.使用 首先引入包 创建一个类库用来服务注册,继承 Au ...
- AutoFac使用方法总结:Part I
utoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法: ...
- AutoFac Ioc依赖注入容器
本文原著:牛毅 原文路径 http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ 理解IOC容器请看下图: 没有使用IOC容器的情况 ...
- IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc
阅读目录: 一. 一个没有使用IoC的例子 二. 当需求发生变动时,非IoC遭遇到的困境 三. 使用IoC彻底解决问题 四. 总结 一.一个没有使用IoC的例子 IoC的全称是Inversion of ...
- Autofac 组件、服务、自动装配 《第二篇》
一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...
- autofac 用法总结
autofac 用法总结 autofac官网: http://autofaccn.readthedocs.io/en/latest/getting-started/index.html autofac ...
最新文章
- javaScript实现字符串首字母大写
- java servicefactory_Java DirectoryServiceFactory.getDirectoryService方法代碼示例
- linux 多线程 多进程同步
- myrocks复制中断问题排查
- python图标的演变_Python3 生成icon图标
- 阿里云大数据计算服务MaxCompute命令行工具——odpscmd的操作使用
- 有危害吗_涂料漆对身体有害吗?涂料漆危害怎么预防
- 2017-2018-1 20155227 《信息安全系统设计基础》第十一周学习总结
- 漫话:是时候说说到底什么是 IPv4 和 IPv6 了!
- Centos 进入单入口模式
- 《人人都是产品经理》系列图书说明 Late2021
- linux编写的员工管理系统,员工信息管理系统设计与实现(叶晖).doc
- Win10蓝牙开关不显示,任务栏不显示蓝牙图标解决方案
- Linux的命令回收站在哪,Linux命令行删除文件到回收站
- 电机远计算机控制,电机控制器
- 可以计算一元二次方程复数根的模拟计算机
- Codeforces 711c 简单dp
- 【Java设计模式】简单学外观模式——万能遥控器
- 七步成诗(事)- 定义问题
- CSS linear-gradient 实现背景双色或多色,颜色渐变,颜色分明