Asp.Net Core学习笔记7——依赖注入

Asp.Net Core学习笔记7——依赖注入

1.什么是依赖注入

  我们想要弄明白依赖注入是什么,首先得了解什么是依赖?简而言之,依赖是指一个类使用了另一个类,这两个类之间得关系是临时、偶然的,这种关系联系不够紧密。例如一个学生需要用笔完成书写的作业。此时学生与笔之间的关系就是依赖关系。依赖注入(Dependency Injection,简称DI)就是把有依赖关系的类存放到容器中,通过外部以参数或其他形式注入
  我们在查资料时,常常发现控制反转(Inversion Of Control,简称IOC)与DI形影不离,那么怎样理解IOC?IOC可以简单理解为:把组件间的依赖关系从程序内部提到外部来管理。例如我们在登录时使用Log4Net工具记录日志信息,常有这样的写法:

复制代码
public class LoginController : ControllerBase
 {
    ILogService _logService;
         
    public LoginController()
    { 
        _logService = new Log4NetService(); 
   }
}
复制代码

  LoginController控制器使用了ILogService 接口完成记录信息的操作,LoginController对ILogService产生依赖,而我们定义Log4Net实现ILogService接口。倘若我们想换System.Logger写日志,就要改LoginController的代码,把“newLog4NetService();”改成LoggerService类。那么后面不想用System.Logger,想用Log4Net写日志,这样也要改代码。

  如果我们把代码写成这样:

复制代码
 public class LoginController : ControllerBase
 {
    private ILogService _logService;
         
    public LoginController(ILogService logService)
    { 
        _logService = logService(); 
    }
}
复制代码

  外界通过LoginController的构造方法把ILogService这个依赖传进来, LoginController 只需要完成自己的任务,不用考虑使用哪种方式写日志。这种方式就是IOC,由LoginController 控制的ILogService变成了通过外部灵活控制的方式,从而实现了解耦合

 

2.实例的注册

2.1 在Startup类的ConfigureServices中注入:

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddTransient<ILogService, Log4NetService>(); 
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

2.2 在构造函数传入实例:

复制代码
 public class LoginController : ControllerBase
 {
    private ILogService _logService;
         
    public LoginController(ILogService logService)
    { 
        _logService = logService(); 
    }
}
复制代码

 

3.三种依赖注入模式

 

AddSingleton():一般情况下,一个应用程序只创建一次Singleton服务,在整个应用程序生命周期中使用这个服务。写日志会用到这种注入方式。
AddScoped():在范围内的每个请求中创建一个新的 Scoped 服务实例。在用户登录时,获取登录系统用户的Id,也会用到这种注入方式。
AddTransient():每次请求时,都会创建一个新的 Transient 服务实例。一般写的业务都是这种。

 

 

  

posted @   落叶窥秋  阅读(235)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示