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

如何免费建立官方网站品牌创意网站建设徕卡e

如何免费建立官方网站,品牌创意网站建设徕卡e,芜湖县住房建设局网站,微信小程序第三方开发依赖注入配置变形 随着业务的增长,我们项目工作中的类型、服务越来越多,而每一个服务的依赖注入关系都需要在入口文件通过Service.Add{}方法去进行注册,这将是非常麻烦的,入口文件需要频繁改动,而且代码组织管理也会变…

在这里插入图片描述

依赖注入配置变形

随着业务的增长,我们项目工作中的类型、服务越来越多,而每一个服务的依赖注入关系都需要在入口文件通过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 AddAutoInject<T>(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 name="services"></param>/// <param name="type"></param>public 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 name="type"></param>/// <returns></returns>public 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 name="type"></param>/// <returns></returns>public IList<Type> ExposeService(Type type){var serviceTypes = new List<Type>();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.yayakq.cn/news/730694/

相关文章:

  • 常州网站排名优化网页版微信文件保存在哪里
  • 网站广告淘宝电商平台网站
  • 网站一般用什么做的网站模板分类
  • 公司网站非响应式模板seo网站优化价格
  • 网站遭到攻击 运维怎么做互联网网站界面设计 要素
  • 连云港网站建设网站江苏网站建设seo优化
  • 郑州网站设计 公司网站建设金手指
  • 在线视频网站建设wordpress 模板丢失.
  • html5手机微网站全网营销培训
  • 网站被黑企业管理系统排名
  • 河南省住房建设厅网站首页什么值得买网站模版
  • 许昌市网站建设科技支付集成文件放在网站哪里
  • 唐山网站建设怎么样wordpress the7 使用
  • 用什么软件做网站最简单做化工类网站内容
  • 做门户网站用什么系统农特产品网站建设合同模板
  • 建设部造价工程师网站网站开发用户分析
  • 大型电子商务网站开发架构能免费做网站吗
  • 龙岗做手机网站北京网站制作南昌
  • 小型网站有哪些广告图文制作图片
  • 与有权重网站做友链济南企业网站设计公司
  • 网站建设 空间有什么免费ppt模板网站
  • 台州网站排名网站开发兼职成都
  • 营销型网站制作的目的是怎样建设一个自己的网站微商
  • 网站前台模板下载免费的微信小程序
  • 如何用域名访问网站网页翻译不见了
  • 个人信息网站wordpress固定链接设置后404
  • 网站怎么做app吗动易做网站
  • 古交网站建设大型网站建设公司沈阳
  • 怎么看一个网站是用什么程序做的新手小白怎样运营1688店铺
  • 网站策划专有技术利用电脑做网站