兄弟姐妹们,还有三个月就2021年了,给大家提前拜个早年~嘻嘻。
本系列我将梳理ABP VNext中的技术实现,在自我记录的同时,也帮大家更加深入了解下这个最近非常火的框架。
什么是ABP VNext这里就不做介绍了,大家可以去看资料了解下。这里讲解我们实际业务中如何使用该框架。
1.简介
ABP中依赖注入是基于Microsoft.Extensions.DependencyInjection实现的,在组件开发过程中其实现方式和包括AutoFac在内的第三方类库大同小异。
在实际的开发使用中,我们并没有使用第三方类库,完全基于Microsoft的依赖注入扩展库进行的组件开发。
2.实现方式介绍
在我们基础框架中,依赖注入组件的本质是基于名称匹配,即xxx继承Ixxx,然后通过xxx的名称当做后缀来匹配。
首先我们会有一个公共的接口类,所有要实现依赖注入的类都需要集成这个接口类,共有3个,对应着三种不同的注入方式。
public interface ITransientDependency { }
public interface IScopedDependency { }
public interface ISingletonDependency { }
我们需要在程序及加载的时候去对这些实现了ITransientDependency以及另外两个接口的类进行依赖注入:
private static List<Type> GetDefaultServices(Type type) { var serviceTypes = new List<Type>(); foreach (var interfaceType in type.GetTypeInfo().GetInterfaces()) { var interfaceName = interfaceType.Name; if (interfaceName.StartsWith("I")) { interfaceName = interfaceName.Right(interfaceName.Length - 1); } if (type.Name.EndsWith(interfaceName)) { serviceTypes.Add(interfaceType); } } return serviceTypes; }
这个就是匹配定义和实现的核心方法,我们首先会取到所有的自定义类,然后通过 type.GetTypeInfo().GetInterfaces() 方法获取每个自定义类继承的接口,默认是定义的接口名称是在实现类名前面加一个I,如果去掉I之后名称相同,则会被匹配到一起。