一旦系统内模块比较多,按DI标准方法去逐个硬敲AddScoped/AddSingleton/AddTransient缺乏灵活性且效率低下,所以批量注入提供了很大的便捷性,特别是对于泛型的服务类,下面介绍一下我在xms系统中应用的DI便捷工具:

1. 先来个dll助手

无外部依赖,可直接复用

复制代码
  1 using System;   2 using System.Collections.Generic;   3 using System.Diagnostics;   4 using System.IO;   5 using System.Reflection;   6 using System.Runtime.Loader;   7   8 namespace Xms.Infrastructure.Utility   9 {  10     public class AssemblyHelper  11     {  12         public static List<Assembly> GetAssemblies(string searchPattern = "")  13         {  14             List<Assembly> assemblies = new List<Assembly>();  15             if (searchPattern.HasValue())  16             {  17                 DirectoryInfo root = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);  18                 foreach (FileInfo f in root.GetFiles(searchPattern))  19                 {  20                     assemblies.Add(AssemblyLoadContext.Default.LoadFromAssemblyPath(f.FullName));  21                 }  22             }  23             else 24             {  25                 assemblies.AddRange(AppDomain.CurrentDomain.GetAssemblies());  26             }  27             return assemblies;  28         }  29  30         public static List<Type> GetClassOfType(Type assignTypeFrom, string searchPattern = "")  31         {  32             var assemblies = GetAssemblies(searchPattern);  33             var result = new List<Type>();  34             try 35             {  36                 foreach (var a in assemblies)  37                 {  38                     Type[] types = a.GetTypes();  39  40                     if (types == null)  41                     {  42                         continue;  43                     }  44