.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集成重写上面的Demo1.安装nuget包:Autofac.Extensions.DependencyInjection2.在Program.cs类中配置//替换内置的ServiceProviderFactorybuilder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());builder.Host.ConfigureContainer3.预报天气控制器类,注入、调用(containerBuilder =>{ containerBuilder.RegisterType ().As ().InstancePerLifetimeScope();});
private readonly ILogger_logger;private readonly IUserSerice userService; public WeatherForecastController(ILogger logger, IUserSerice userService){_logger = logger; this.userService = userService;}[HttpGet(Name = "GetWeatherForecast")]public IEnumerable 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
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...