本文的主角是Autofac,它是一款非常奈斯的依赖注入框架。暂时先不讨论,先分享几个名词:DI(依赖注入)、IOC(控制反转)、IOC容器。
Demo很简单,创建一个Asp.NET Core项目,新增一个用户服务类(UserService),在默认创建的天气预报(WeatherForecastController)控制器类中调用。
public class UserService
{
public virtual string GetUser()
{
Console.WriteLine("执行GetUser方法");
return "获取一个用户信息";
}
}
天气预报(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)。
我抛砖引玉下,更好的见解,留言区可以分享^_^
//替换内置的ServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
containerBuilder.RegisterType<UserService>().As<IUserSerice>().InstancePerLifetimeScope();
});
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
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有