NetCore6.0 使用微软自带依赖注入

依赖注入工厂方法 

 1  /// <summary>
 2         /// 注册依赖注入
 3         /// </summary>
 4         /// <param name="serviceCollection"></param>
 5         /// <returns></returns>
 6         public static IServiceCollection AddDIRegister(this IServiceCollection serviceCollection)
 7         {
 8             //反射服务类 当前程序集依赖注入
 9             var services = Assembly.GetAssembly(typeof(CaseService)).GetTypes().Where(a => a.Name.EndsWith("Service") && a.IsAnsiClass && !a.IsAbstract);
10             foreach (var serviceItem in services)
11             {
12                 //通过服务类匹配接口类
13                 var iServiceItem = serviceItem.GetInterfaces().FirstOrDefault(w => w.Name == $"I{serviceItem.Name}");
14                 serviceCollection.AddSingleton(iServiceItem, serviceItem);
15             }
16 
17             //跨程序集依赖注入(方法1)  程序集名称 "Tellyes.Unicorn.CaseService" .dll省略
18             var servicesUnicorn = Assembly.Load("Tellyes.Unicorn.CaseService").GetTypes().Where(w => w.Name.Contains("Service"));
19 
20             foreach (var serviceItemUnicorn in servicesUnicorn)
21             {
22                 //通过服务类匹配接口类
23                 var iServiceItemUnicorn = serviceItemUnicorn.GetInterfaces().FirstOrDefault(w => w.Name == $"I{serviceItemUnicorn.Name}");
24                 if (iServiceItemUnicorn != null && serviceItemUnicorn != null)
25                     serviceCollection.AddSingleton(iServiceItemUnicorn, serviceItemUnicorn);
26             }
27             //通过xml配置进行跨程序集依赖注入(方法2) 逗号前面命名空间,逗号后面程序集命名空间
28             //var iType = Type.GetType("Tellyes.Unicorn.IBGEService,Tellyes.Unicorn.ICaseService");
29             //var pType = Type.GetType("Tellyes.Unicorn.BGEService,Tellyes.Unicorn.CaseService");
30             //if (iType != null && pType != null)
31             //    serviceCollection.AddSingleton(iType, pType);
32 
33             return serviceCollection;
34         }

通过xml配置需设置程序集属性节点

1   <PropertyGroup> 重点红色部分
2     <TargetFramework>net6.0</TargetFramework>
3     <ImplicitUsings>enable</ImplicitUsings>
4     <Nullable>enable</Nullable>
5       <AssemblyName>Tellyes.Unicorn.CaseService</AssemblyName>
6       <RootNamespace>Tellyes.Unicorn.CaseService</RootNamespace>
7   </PropertyGroup>

 注意:构造函数内注入的一定是接口,而不是服务。

启动文件注册依赖注入

 1 var builder = WebApplication.CreateBuilder(args);

2 builder.Services.AddDIRegister(); 

autofac ninject 这两个依赖注入组件也不错

参考地址:https://www.cnblogs.com/qingjiawen/p/16253732.html

                  https://blog.csdn.net/wulaihaoa/article/details/103932954

                  https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-7.0

                  https://www.cnblogs.com/jianghaidong/p/13415124.html

posted @ 2023-04-17 13:20  Fast & Furious  阅读(138)  评论(0)    收藏  举报