网站是什么时候开始的,定做微信小程序,红色扁平化网站,建设电脑网站前言现阶段而言#xff0c;依赖注入相关组件如果不会用一两个#xff0c;感觉在Code的世界里肯定是落伍了#xff0c;最起码得有工厂模式的思想#xff0c;知道这样做的好处#xff1b;提及到依赖注入#xff0c;通常会关联出两个概念#xff1a;Ioc(控制反转)和DI(依赖… 前言现阶段而言依赖注入相关组件如果不会用一两个感觉在Code的世界里肯定是落伍了最起码得有工厂模式的思想知道这样做的好处提及到依赖注入通常会关联出两个概念Ioc(控制反转)和DI(依赖注入)控制反转Inversion of Control缩写为IoC是面向对象编程中的一种设计原则可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入Dependency Injection简称DI。通过控制反转对象在被创建的时候由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说依赖被注入到对象中。百度百科个人理解IoC(控制反转): 就是将原先的new对象这个操作交由第三方容器由容器统一创建对象并管理其创建对象的生命周期DI(依赖注入): 我理解其中“依赖”有两层意思 类与类之间的依赖关系 对象的创建依赖于容器 注入不用主动从容器中获取对象由容器根据对象依赖关系自动注入 依赖注入程序将对象控制权交给容器统一依赖容器创建对象类之间的依赖也是通过容器自动注入注注入的前提是要把对象的控制权交给容器依赖注入优点 轻松管理类及类之间的依赖 减少代码耦合性 提高代码维护性和可扩展性 由容器统一创建对象和管理生命周期好了先不详细深究了这里先说说.NetCore中自带的依赖注入框架怎么玩正文 先看看.NetCore中的自带的依赖注入怎么用先创建一个Asp.NetCore 程序 上图是模板程序只在Action 方法中直接使用了模板中已经注入好_logger的对象此对象通过构造函数的形式注入刚开始接触的Asp.NetCore的小伙伴会疑问都没注册对应服务怎么会注入其实在我们启动过程的时候简单说到过框架会自动注入一些默认的服务其中就用ILogger用起来就是这么简单 .NetCore中依赖注入有几个关键的类型简单介绍一下IServiceCollection负责存储注册的服务可以通过其扩展方法进行服务注册ServiceDescriptor服务注册时的信息如服务类型、实现类型、实例类型、生命周期等IServiceProvider 理解是常说的容器是IServiceCollection创建出来的用来提供实例的IServiceScope表示一个容器的子容器的生命周期通过以上可以简要理解注入的简要过程通过容器创建的出来的对象根据不同的注入方式有以下三种生命周期Singleton(单例) 整个根容器的生命周期内是同一个对象通过 services.AddSingleton()方法进行注册Scoped(作用域) 在容器或子容器的生命周期内对象保持一致如果容器释放掉那就意味着对象也会释放掉通过 services.AddScoped()方法进行注册Transient(瞬时) 每次使用都会创建新的实例通过 services.AddTransient()方法进行注册 注services 是 IServiceCollection services 以下通过程序演示常用的注入方法及其对应的生命周期在以上创建的项目中针对不同的生命周期添加不同的类型里面没有任何代码如下图 在Startup文件的ConfigureServices方法中进行注册如下 注册完毕之后在Controller中的Action方法就可以使用了如下 通过对比每个对象的HashCode, 如果一样就代表是同一个对象运行程序看结果(这里以项目的形式运行在控制台中方便看输出) 以上实例只是常规注册方式还有以下常用注册方式如下图 新增一个IUserService方便后续演示 Asp.NetCore自带依赖注入的注册方式如下 增加一个Action方法打了个断点运行调试其他注入方式就不一一运行演示了这里主要演示排他注册的结果如下所以结果成立IUserService和IStudentService都注册了三次但最终通过排他注册方式最后成功的只一个和两个泛型注册方式提供模板注册如下先定义一个泛型注册只能通过参数的形式注册使用方式和上面一样依赖注入其他操作两种常用注入方式构造函数注入当注入的服务对象多个地方使用时就用构造函数的形式注入[FromService]注入当只是临时使用服务对象时就用[FromService]注入总结 .NetCore自带的注入常用用法差不多就这些下一节说说作用域及容器创建对象之后的释放