当前位置: 首页 > news >正文

徐州网站建设公司官网个人网站要买多大的空间

徐州网站建设公司官网,个人网站要买多大的空间,海南住房建设厅网站,网站开发 培训 周末班依赖注入配置变形 随着业务的增长#xff0c;我们项目工作中的类型、服务越来越多#xff0c;而每一个服务的依赖注入关系都需要在入口文件通过Service.Add{}方法去进行注册#xff0c;这将是非常麻烦的#xff0c;入口文件需要频繁改动#xff0c;而且代码组织管理也会变… 依赖注入配置变形 随着业务的增长我们项目工作中的类型、服务越来越多而每一个服务的依赖注入关系都需要在入口文件通过Service.Add{}方法去进行注册这将是非常麻烦的入口文件需要频繁改动而且代码组织管理也会变得麻烦非常不优雅。 在许多框架中会对这种通过 Service.Add{xxx} 的方式在代码中显式注册依赖注入关系的方式进行变形有的可以通过配置文件进行注册 这里稍微简单介绍一下依赖注入默认注册的原理其实也就是通过放射的一些手段再加上一些约定好的规则而已。 约定 实现类要接口结尾 》Izen 接口 》实现类 MyServiceZen 这里稍微简单介绍一下依赖注入默认注册的原理其实也就是通过放射的一些手段再加上一些约定好的规则而已。 public interface ISingleton { } public interface IScoped { } public interface ITransient { } 》》定义一个扩展类 实现 IServiceCollection 的扩展方法 namespace Microsoft.Extensions.DependencyInjection {public static class ServiceCollectionDependencyExtensions{public static IServiceCollection AddAutoInjectT(this IServiceCollection services){var register new ServiceRegister();register.AddAssembly(services, typeof(T).Assembly);return services;}} } 》》》这个扩展方法中调用了注册器往容器中注入服务实现如下 public class ServiceRegister {public void AddAssembly(IServiceCollection services, Assembly assembly){// 查找程序中的类型var types assembly.GetTypes().Where(t t ! null t.IsClass !t.IsAbstract !t.IsGenericType);// 遍历每一个类检查释放满足约定的规则foreach (var type in types){AddType(services, type);}}/// summary/// 添加当前类型的依赖注入关系/// /summary/// param nameservices/param/// param nametype/parampublic void AddType(IServiceCollection services, Type type){var lifetime GetLifetimeOrNull(type);if (lifetime null){return;var exposeServices ExposeService(type);foreach (var serviceType in exposeServices){var serviceDescriptor new ServiceDescriptor(serviceType, type, lifetime.Value);services.Add(serviceDescriptor);}}/// summary/// 根据标记接口确定生命周期如果没有添加标记接口的则不会被自动注册到容器/// /summary/// param nametype/param/// returns/returnspublic ServiceLifetime? GetLifetimeOrNull(Type type){if (typeof(ISingleton).IsAssignableFrom(type)){return ServiceLifetime.Singleton;}if(typeof(IScoped).IsAssignableFrom(type)){return ServiceLifetime.Scoped;}if(typeof(ITransient).IsAssignableFrom(type)){return ServiceLifetime.Transient;}return null;}/// summary/// 根据约定的规则查找当前类对于的服务类型/// 通过接口实现的方式查找当前类实现的接口如果一个接口名称去除了 I 之后与当前类的后半段一样/// 则当前类应该被注册为这个接口的服务。/// /summary/// param nametype/param/// returns/returnspublic IListType ExposeService(Type type){var serviceTypes new ListType();var interfaces type.GetInterfaces();foreach (var interfacesType in interfaces){var interfaceName interfacesType.Name;if (interfaceName.StartsWith(I)){interfaceName interfaceName.Substring(1);}if (type.Name.EndsWith(interfaceName)){serviceTypes.Add(interfacesType);}}return serviceTypes;} } 整体的逻辑就是查找遍历程序集中的所有类型并通过判别类型是否实现之前定好的三个生命周期接口 从而确定类型是否需要自动注册到容器中如果需要再根据约定好的规则获取需要注册的服务类型并且构建服务描述器再将其添加到容器中。 之后在入口文件中这样使用 》builder.Services.AddAutoInject();
http://www.hkea.cn/news/14289189/

相关文章:

  • 霍邱县住房和城乡建设局网站网络系统运维
  • 设计软件网站网站建设买服务器还是数据库
  • 电子商务网站开发的形式有建设集团招工信息网站
  • 网站搜索引擎优化推广西安美食
  • 专业微网站建设公司哪家好建网站 陕西牛人网络科技
  • 网站建设及维护费一级做a视频在线观看网站
  • 浙江企业响应式网站建设设计搜狐快站怎么做网站
  • 怎样做网站网站装饰装修网站模板建设
  • 搭建网站需要程序安徽网站建设网络公司
  • 网站公司深圳电商网站如何备案
  • 广元市建设局官方网站网络推广的目标
  • 上交所大宗交易平台做seo的网站有那些
  • php网站开发笔试题网站开发工程师swot分析
  • 吉林建设教育协会网站质量基础设施一站式服务工作站
  • 视频网站建设工具广州公司网站开发
  • 销售型网站怎么做的关于电子商务的网站推广方案
  • 局域网站建设百度小程序是什么
  • 网站开发员工保密协议做网站技术服务费属于什么科目
  • 网站建设 0551做网站哪个平台
  • 互联网建设网站网站做app的软件叫什么
  • 做网站公司能赚钱吗沧州建网站
  • 网站建设的行业资讯做网站的怎么获取客户信息
  • 网站后台登录模板app开发方式有哪些
  • wordpress更改网站内容自己建设的手机网站做百度地图定位
  • 宿舍管理网站建设重庆最专业的房产网站建设
  • 做收益的网站多少钱如何做好互联网营销
  • 怎么建立一个网站链接wordpress外贸推广
  • 怎样建设旅游网站企业网络拓扑图及配置
  • 网站域名ip地址查询动漫与游戏制作这个专业怎么样
  • 唐山网址建站wordpress换行不显示