关于asp.net-core:IOC容器技术ServiceCollection
前言什么是依赖注入?依赖注入(Dependency Injection),简称DI。 因为某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点。在程序运行过程中,客户类不间接实例化具体服务类实例,而是客户类的运行上下文环境或专门组件负责实例化服务类,而后将其注入到客户类中,保障客户类的失常运行。依赖关系反转应用程序中的依赖关系方向应该是形象的方向,而不是实现详细信息的方向。 大部分应用程序都是这样编写的:编译时依赖关系顺着运行时执行的方向流动,从而生成一个间接依赖项关系图。 也就是说,如果类 A 调用类 B 的办法,类 B 调用 C 类的办法,则在编译时,类 A 将取决于类 B,而 B 类又取决于类 C,如图所示 间接关系依赖利用依赖关系反转准则后,A 能够调用 B 实现的形象上的办法,让 A 能够在运行时调用 B,而 B 又在编译时依赖于 A 管制的接口(因而,典型的编译时依赖项产生反转)。 运行时,程序执行的流程放弃不变,但接口引入意味着能够轻松插入这些接口的不同实现。 反转依赖项关系图依赖项反转是生成涣散耦合应用程序的要害一环,因为能够将实现详细信息编写为依赖并实现更高级别的形象,而不是相同。 因而,生成的应用程序的可测试性、模块化水平以及可维护性更高。 遵循依赖关系反转准则可实现依赖关系注入。NET 中的依赖关系注入.NET 反对依赖关系注入 (DI) 软件设计模式,这是一种在类及其依赖项之间实现管制反转 (IoC) 的技术。 .NET 中的依赖关系注入是框架的内置局部。内置的IOC容器通过nuget增加援用 Microsoft.Extensions.DependencyInjection Microsoft.Extensions.DependencyInjection.Abstractionsinternal class Program{ private static void Main(string[] args) { DbHelper dbHelper = new DbHelper(); dbHelper.DoConnect(); }}public class DbHelper{ private readonly Redis redis = new Redis(); public void DoConnect() { redis.Connect(); }}public class Redis{ public void Connect() { Console.WriteLine($"HashCode:{this.GetHashCode()}Redis.....Connect"); }}在下面代码中,类DbHelper创立并间接依赖于Redis类。 硬编码的依赖项会产生问题,应防止应用,起因如下: ...