手机购物网站 设计,西安建网站公司哪家好,手机端网站怎么制作,手机端网站开发源码.NET8/.NETCore 依赖接口注入#xff1a;自动注入项目中所有接口和自定义类
目录
自定义依赖接口扩展类#xff1a;HostExtensions AddInjectionServices方法GlobalAssemblies 全局静态类测试
自定义依赖接口
需要依赖注入的类必须实现以下接口。
C# /// summary自动注入项目中所有接口和自定义类
目录
自定义依赖接口扩展类HostExtensions AddInjectionServices方法GlobalAssemblies 全局静态类测试
自定义依赖接口
需要依赖注入的类必须实现以下接口。
C# /// summary/// 依赖接口/// /summarypublic interface IDependency { }/// summary/// 注入接口生命周期Transient/// /summarypublic interface ITransientDependency : IDependency { }/// summary/// 注入接口生命周期Scoped/// /summarypublic interface IScopedDependency : IDependency { }/// summary/// 注入接口生命周期Singleton/// /summarypublic interface ISingletonDependency : IDependency { } 扩展类HostExtensions AddInjectionServices方法 C# public static class HostExtensions{/// summary/// 自动注入接口, 注入到服务容器IServiceCollection/// /summary/// param nameservices/param/// returns/returnspublic static IServiceCollection AddInjectionServices(this IServiceCollection services){//服务生命周期映射DictionaryType, ServiceLifetime map new DictionaryType, ServiceLifetime{{ typeof(ITransientDependency),ServiceLifetime.Transient },{ typeof(IScopedDependency),ServiceLifetime.Scoped },{ typeof(ISingletonDependency),ServiceLifetime.Singleton },{ typeof(IDependency),ServiceLifetime.Scoped },};//获取程序集所有实体模型Typevar listTypes GlobalAssemblies.GetTypes();foreach (var type in listTypes){map.ToList().ForEach(aMap {//依赖注入接口var interfaceDependency aMap.Key;if (interfaceDependency.IsAssignableFrom(type) interfaceDependency ! type !type.IsAbstract type.IsClass){//注入实现Console.WriteLine(注入实现 type.FullName , aMap.Value.ToString()); services.Add(new ServiceDescriptor(type, type, aMap.Value));//获取当前类的所有接口var interfaces listTypes.Where(x x.IsInterface x.IsAssignableFrom(type) x ! interfaceDependency).ToList();//有接口注入接口if (interfaces.Count 0){interfaces.ForEach(inteface {Console.WriteLine(注入接口 type.FullName , inteface.FullName , aMap.Value.ToString());services.Add(new ServiceDescriptor(inteface, type, aMap.Value));});}}});};return services;}} GlobalAssemblies 全局静态类
加载程序集Assembly。
作用
用于初始化CSFramework.EF组件注册实体模型用于获取所有接口和类依赖注入服务
C# public static class GlobalAssemblies{/// summary/// 加载程序集Assembly。/// 作用1.用于初始化CSFramework.EF组件注册实体模型/// 2.用于获取所有接口和类依赖注入服务/// /summary/// param namehostBuilder/param/// returns/returnspublic static void LoadAssemblies(){//加载以下程序集(包含所有实体模型、自定义服务的程序集)GlobalAssemblies.Assemblies new ListSystem.Reflection.Assembly{//如CSFramework.LicenseServerCore.dllSystem.Reflection.Assembly.Load(CSFramework.LicenseServerCore),System.Reflection.Assembly.Load(CSFramework.Models),};}/// summary/// WebApi框架所有程序集/// /summarypublic static ListSystem.Reflection.Assembly Assemblies { get; set; }/// summary/// WebApi框架所有类型Types/// /summarypublic static ListSystem.Type GetTypes(){return Assemblies.SelectMany(m m.GetExportedTypes()).ToList();}} 测试