APB VNext系列(一):依赖注入

兄弟姐妹们,还有三个月就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之后名称相同,则会被匹配到一起。

原文地址:https://www.cnblogs.com/weiBlog/p/13702917.html