引入Wukong让你的系统瞬间具备IOC能力


【Github源码】

本文重点要说的是如何通过引入Wukong第三方包让自己的系统能够拥有IOC容器能力,但在具体讲解步骤之前,还是想先简单的介绍一下什么是IOC以及它存在的意义;同时也就能清楚Wukong能为大家解决哪些问题。

一、IOC的用途和意义?

? IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”;也有的地方叫做“依赖注入(Dependency Injection)”。
? 作者的理解IOC是一种基于工厂模式的更高级的对象获取模式;使用该方法,可以将通过new方法创建对象实例的传统方式;替换为通过IOC容器获取对象实例。通过使用IOC容器消除了对象之间的依赖强耦合,实现了对象之间的解耦,使得系统更灵活、更易扩展和维护。

1. 传统的对象获取方式

1664193355681

传统方式必须在项目中显示引入对象所在程序集,同时在需要对象的位置进行显示创建。

Person p = new Person();
p.SetName("张三");
2. IOC容器获取对象方式

1664193397623

? 而IOC方式,项目只需要显示引入Wukong依赖包,其他需要的对象通过IOC容器进行获取;IOC和各个对象之间完全是弱引用,只会在IOC获取真实对象实例时,才会去相应位置搜索对象定义并创建实例。

dynamic p = Wukong.GetObject("CodeM.Test.Person");
p.SetName("张三");

二、如何引入Wukong依赖

1. Package Manager
Install-Package Wukong -Version 2.0.5
2. .NET CLI
dotnet add package Wukong --version 2.0.5
3. PackageReference

4. Paket CLI
paket add Wukong --version 2.0.5

三、如何通过Wukong获取对象实例

Wukong提供了两种获取对象的方式,一种是通过类全名称,二是通过配置方式获取。

1. 通过类全名称获取对象实例

? Wukong提供了Github说明文档

五、通过Wukong获取对象是如何找到对象所在程序集的

? 前面讲到传统方式使得对象之间依赖性太强,耦合严重;造成这个问题的原因有两个:一是在每个使用对象的位置都需要通过new方法创建实例;二是所有使用到的对象都必须在项目中引用对象所在的包。

? 那么当我们指定了类的全名称之后,Wukong是如何通过类全名称找到相应的类定义信息并创建实例的呢?Wukong有两种方法实现上述目的:一是像传统方法一样将对象所在的第三方包进行显示引用,但这种方式会导致引用之间的强耦合性;同时对于系统的扩展性不是很友好;因此并不推荐;第二种方式是将第三方包程序集文件放到系统运行目录或其他指定目录即可,该种方式灵活已扩展,且方便系统运行中的热更新,推荐使用该方法。

? 当使用第二种方法时,如果将第三方包程序集文件放在系统运行目录中,不需要做额外工作,即可通过Wukong正常获取到其中的对象实例;假如因为某种原因需要将程序集文件放到其他指定目录中,此时需要使用Wukong提供的方法【Github源码】