本文的主角是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功能一角,也是吸引我的地方

  1. 丰富注册(服务组件与实现的配置)方式:①RegisterType、②RegisterAssemblyTypes、③Autofac.Module

  2. 注入方式:①构造函数、②属性

  3. 生命周期:①瞬时、②单例、③范围

  4. 支持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相关推荐

  1. .NET6 使用 AutoFac (落地)

    一.Net 6环境下的.net core项目里如何使用Autofac实现依赖注入. 通常的,我们把其他服务注入到Controller时,使用.net core自带的依赖注入即可,但是如果我们要实现自定 ...

  2. 【Blog.Core开源】将Program升级为.NET6.0版本

    大家假期好,好久不见,之前忙于其他事情,公众号暂时搁置了一个月了,新的一年开始了,很多小伙伴开始催更了,粉丝的要求必须满足. 2022年打算重点推广BCVP社区,所以还是希望有愿意投稿的小伙伴,积极投 ...

  3. 详解 .Net6 Minimal API 的使用方式

    随着 .Net6 的发布,微软也改进了对之前 ASP.NET Core 构建方式,使用了新的 Minimal API 模式.以前默认的方式是需要在 Startup 中注册 IOC 和中间件相关,但是在 ...

  4. .NetCore——Autofac使用

    .NetCore--Autofac使用 一.介绍 Autofac是一个开源的轻量级的依赖注入容器,也是当下比较流行的实现依赖注入的工具之一. 二.使用 首先引入包 创建一个类库用来服务注册,继承 Au ...

  5. AutoFac使用方法总结:Part I

    utoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法: ...

  6. AutoFac Ioc依赖注入容器

    本文原著:牛毅  原文路径 http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ 理解IOC容器请看下图: 没有使用IOC容器的情况 ...

  7. IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc

    阅读目录: 一. 一个没有使用IoC的例子 二. 当需求发生变动时,非IoC遭遇到的困境 三. 使用IoC彻底解决问题 四. 总结 一.一个没有使用IoC的例子 IoC的全称是Inversion of ...

  8. Autofac 组件、服务、自动装配 《第二篇》

    一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...

  9. autofac 用法总结

    autofac 用法总结 autofac官网: http://autofaccn.readthedocs.io/en/latest/getting-started/index.html autofac ...

最新文章

  1. javaScript实现字符串首字母大写
  2. java servicefactory_Java DirectoryServiceFactory.getDirectoryService方法代碼示例
  3. linux 多线程 多进程同步
  4. myrocks复制中断问题排查
  5. python图标的演变_Python3 生成icon图标
  6. 阿里云大数据计算服务MaxCompute命令行工具——odpscmd的操作使用
  7. 有危害吗_涂料漆对身体有害吗?涂料漆危害怎么预防
  8. 2017-2018-1 20155227 《信息安全系统设计基础》第十一周学习总结
  9. 漫话:是时候说说到底什么是 IPv4 和 IPv6 了!
  10. Centos 进入单入口模式
  11. 《人人都是产品经理》系列图书说明 Late2021
  12. linux编写的员工管理系统,员工信息管理系统设计与实现(叶晖).doc
  13. Win10蓝牙开关不显示,任务栏不显示蓝牙图标解决方案
  14. Linux的命令回收站在哪,Linux命令行删除文件到回收站
  15. 电机远计算机控制,电机控制器
  16. 可以计算一元二次方程复数根的模拟计算机
  17. Codeforces 711c 简单dp
  18. 【Java设计模式】简单学外观模式——万能遥控器
  19. 七步成诗(事)- 定义问题
  20. CSS linear-gradient 实现背景双色或多色,颜色渐变,颜色分明

热门文章

  1. 南加大计算机游戏专业,南加州大学计算机科学理科硕士(游戏发展)入学条件及实习就业...
  2. 微信小程序——【云音乐播放器】
  3. 【linux】posix是什么都不知道,还好意思说你懂Linux?
  4. Python超详细基础入门教程
  5. Android系统版本与代号
  6. kvm虚拟机扩展磁盘空间
  7. VM虚拟机开机黑屏解决方法(转载)
  8. matplotlib之pyplot模块——绘制箱线图(盒须图)boxplot()(一)基本参数
  9. IBM SPSS CLEMENTINE 下载安装
  10. Android TextView文字底部或者中间 加横线