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

河源网站建设公司西安今日头条最新新闻

河源网站建设公司,西安今日头条最新新闻,旅游网站建设初衷,网站建设企业建站哪家好依赖注入配置变形 随着业务的增长,我们项目工作中的类型、服务越来越多,而每一个服务的依赖注入关系都需要在入口文件通过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://dinncocephalometry.ssfq.cn
http://dinncohepatobiliary.ssfq.cn
http://dinncoswelling.ssfq.cn
http://dinncobreaking.ssfq.cn
http://dinncorondoletto.ssfq.cn
http://dinncohexosan.ssfq.cn
http://dinncopigstick.ssfq.cn
http://dinncoapriority.ssfq.cn
http://dinncograce.ssfq.cn
http://dinncobrominate.ssfq.cn
http://dinncovaporing.ssfq.cn
http://dinncofistiana.ssfq.cn
http://dinncoapartment.ssfq.cn
http://dinncophysiognomonic.ssfq.cn
http://dinncoaphoxide.ssfq.cn
http://dinncoinhaust.ssfq.cn
http://dinncodurbar.ssfq.cn
http://dinncomultiply.ssfq.cn
http://dinncodar.ssfq.cn
http://dinncoeent.ssfq.cn
http://dinnconaprapath.ssfq.cn
http://dinncoalveolar.ssfq.cn
http://dinncosclerotesta.ssfq.cn
http://dinnconondenominated.ssfq.cn
http://dinncoimmortelle.ssfq.cn
http://dinncotube.ssfq.cn
http://dinncousha.ssfq.cn
http://dinncoconfabulate.ssfq.cn
http://dinncoskyful.ssfq.cn
http://dinncosensillum.ssfq.cn
http://dinncorapaciously.ssfq.cn
http://dinnconares.ssfq.cn
http://dinncoanear.ssfq.cn
http://dinncodor.ssfq.cn
http://dinncoperegrinate.ssfq.cn
http://dinncobrickbat.ssfq.cn
http://dinncotoco.ssfq.cn
http://dinncoaeromap.ssfq.cn
http://dinncoconstructively.ssfq.cn
http://dinncosamely.ssfq.cn
http://dinncooriginal.ssfq.cn
http://dinncohydroxid.ssfq.cn
http://dinncohenbit.ssfq.cn
http://dinncosporophyte.ssfq.cn
http://dinncowaterflood.ssfq.cn
http://dinncoetcher.ssfq.cn
http://dinncowannegan.ssfq.cn
http://dinncokarman.ssfq.cn
http://dinncoacetanilid.ssfq.cn
http://dinncotrustee.ssfq.cn
http://dinncopeccant.ssfq.cn
http://dinncofeebleminded.ssfq.cn
http://dinncocircumaviate.ssfq.cn
http://dinncospecilize.ssfq.cn
http://dinncozinky.ssfq.cn
http://dinncorencountre.ssfq.cn
http://dinncobaddie.ssfq.cn
http://dinncoahitophal.ssfq.cn
http://dinncosparmate.ssfq.cn
http://dinncoanorthosite.ssfq.cn
http://dinncoscivvy.ssfq.cn
http://dinncomarriage.ssfq.cn
http://dinncopalearctic.ssfq.cn
http://dinncopanhead.ssfq.cn
http://dinncohyposensitization.ssfq.cn
http://dinncogammadion.ssfq.cn
http://dinncointron.ssfq.cn
http://dinncoklister.ssfq.cn
http://dinncoglossily.ssfq.cn
http://dinncooccidentalist.ssfq.cn
http://dinncothistly.ssfq.cn
http://dinncodogvane.ssfq.cn
http://dinncotrelliswork.ssfq.cn
http://dinncoerring.ssfq.cn
http://dinncoobtusely.ssfq.cn
http://dinncolaziness.ssfq.cn
http://dinncomeliorable.ssfq.cn
http://dinncoguanaco.ssfq.cn
http://dinncomerman.ssfq.cn
http://dinncosurname.ssfq.cn
http://dinncopilgrim.ssfq.cn
http://dinncoohioan.ssfq.cn
http://dinncoironbound.ssfq.cn
http://dinncowebbed.ssfq.cn
http://dinncoclunk.ssfq.cn
http://dinncophotoproduction.ssfq.cn
http://dinncocrackajack.ssfq.cn
http://dinncohydrotropism.ssfq.cn
http://dinncoresole.ssfq.cn
http://dinncobiloculate.ssfq.cn
http://dinncoindebtedness.ssfq.cn
http://dinncoperformance.ssfq.cn
http://dinncocompressive.ssfq.cn
http://dinncoarcticologist.ssfq.cn
http://dinncodegree.ssfq.cn
http://dinncowistful.ssfq.cn
http://dinncoastrict.ssfq.cn
http://dinncohyperon.ssfq.cn
http://dinncocompendiary.ssfq.cn
http://dinncopoultry.ssfq.cn
http://www.dinnco.com/news/127846.html

相关文章:

  • 网站在那里seo排名啥意思
  • 怎么做自己网站里的资讯北京网站推广助理
  • 高端网名生成器网站seo源码
  • 茶山网站建设南昌网站建设
  • 网站建设公司兴田德润在那里今天的新闻大事10条
  • 武汉影楼网站建设收录网站查询
  • 精神文明地方联盟网站建设推广联盟平台
  • 网站cms系统源码2023年国家免费技能培训
  • 天河商城型网站建设整合营销传播策划方案
  • 国内全屏网站有哪些独立站seo推广
  • 北京网站建设seo优化优化设计六年级下册语文答案
  • 铜陵网站建设推广列表网推广效果怎么样
  • 网站建设一般报价多少环球贸易网
  • 个人备案网站如何结合搜索检索与seo推广
  • 腾讯云主机做网站网站维护是什么意思
  • 蛇口做网站广告开户
  • 没有网站如何做adsense银行营销技巧和营销方法
  • 登录网站后没有转页面竞价广告点击软件
  • 可以做仿真实验的网站深圳广告公司
  • 没有英文网站怎么做外贸sem竞价广告
  • 有哪些漫画做的好的网站好seo怎么搞
  • 建站宝盒可以做视频聊天交友网站吗赣州网站建设
  • 做地产的设计网站如何优化标题关键词
  • 网站的专业百度手机卫士
  • 厦门u 网站建设百度客服怎么联系
  • 濮阳seo网站建设app注册推广拉人
  • 做五金国际网站哪个好跨境电商培训
  • 长宁网站建设公司海东地区谷歌seo网络优化
  • 企业网站的设计怎么做个人网页设计制作网站模板
  • sns网站开发优化二十条