.Net 5.0 批量依赖注入

原因:我们在.net 5.0 中使用依赖注入, 每一个服务都得注入一次,为了解决这个问题我们可以使用批量依赖注入

思路:在.net 5.0中注入服务我们需要用到 IServiceCollection 实现注入,这个时候我们可以想到使用扩展方法,反射的方式去实现,直接上代码

1.创建扩展方法类

 1  /// <summary>
 2     /// 依赖注入扩展方法
 3     /// </summary>
 4     public static class InjectionExtBL
 5     {
 6         /// <summary>
 7         /// 批量注入
 8         /// </summary>
 9         /// <param name="services">扩展对象</param>
10         /// <param name="interfaceAssembly">接口</param>
11         /// <param name="implementAssembly">实现类</param>
12         public static void AddTransientExtension(this IServiceCollection services, Assembly interfaceAssembly, Assembly implementAssembly) 
13         {
14             var interfaces = interfaceAssembly.GetTypes().Where(d => d.IsInterface);//拿到所有项目中所有的接口
15             var implements = implementAssembly.GetTypes();//拿到项目中所有的成员
16             foreach (var item in interfaces)
17             {
18                 //拿到实现了上面接口的成员,如果没有就返回null
19                 var type = implements.FirstOrDefault(t => item.IsAssignableFrom(t));
20                 //如果实现了,直接注入
21                 if (type != null)
22                 {
23                     services.AddTransient(item, type);
24                 }
25             }
26         }
27     }

2.在setup --> ConfigureServices中使用.

       services.AddTransientExtension(Assembly.Load("OnlineTest.RepositoryInterface"), Assembly.Load("OnlineTest.Repository"));//批量注入仓储
            services.AddTransientExtension(Assembly.Load("OnlineTest.BLInterface"), Assembly.Load("OnlineTest.BL"));//批量注入BL

 

posted @ 2022-07-28 15:23  echo_sw  阅读(203)  评论(0编辑  收藏  举报