范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

NetCore依赖注入

  一、配置文件的读取
  利用Startup类中的configuration读取appsettings.json中的配置 { "Logging": {   "LogLevel": {     "Default": "Warning"   } }, "option1": "value1_from_json", "option2": 2, "subsection": {   "suboption1": "subvalue1_from_json",   "Read": [     "Data Source=.; Database=Customers_New1; User ID=sa; Password=Passw0rd; MultipleActiveResultSets=True",     "Data Source=ElevenPC; Database=Customers_New2; User ID=sa; Password=Passw0rd; MultipleActiveResultSets=True",     "Data Source=.; Database=Customers_New3; User ID=sa; Password=Passw0rd; MultipleActiveResultSets=True"   ] }, "wizards": [   {     "Name": "Gandalf",     "Age": "1000"   },   {     "Name": "Harry",     "Age": "17"   } ], "AllowedHosts": "*" }  public IConfiguration Configuration { get; }  public Startup(IConfiguration configuration)  {      Configuration = configuration;  }    this.Configuration["Option1"]  this.Configuration["subsection:suboption1"]  string[] _SqlConnectionStringRead = this._iConfiguration.GetSection("subsection").GetSection("Read").GetChildren().Select(s => s.Value).ToArray(); 二、自带IOC容器1.基本使用NuGet安装引用Microsoft.Extensions.DependencyInjection; 实例化容器 注册服务 创建一个System.IServiceProvider提供程序 创建实例  using Microsoft.Extensions.DependencyInjection;  IServiceCollection container = new ServiceCollection();  container.AddTransient();  IServiceProvider provider = container.BuildServiceProvider();  _Interface  interface = provider.GetService<_Interface>() 2.服务类型
  1.container.AddTransient为瞬时生命周期,每次创建都是一个全新的实例 IServiceCollection container = new ServiceCollection(); container.AddTransient(); IServiceProvider provider = container.BuildServiceProvider(); _Interface  interface = provider.GetService<_Interface>(); _Interface  interface2 = provider.GetService<_Interface>(); bool bResult = object.ReferenceEquals(interface, interface2); //b is false
  2.container.AddSingleton单例:全容器都是一个 IServiceCollection container = new ServiceCollection(); container.AddSingleton(); IServiceProvider provider = container.BuildServiceProvider(); _Interface  interface = provider.GetService<_Interface>(); _Interface  interface2 = provider.GetService<_Interface>(); bool bResult = object.ReferenceEquals(interface, interface2);  //b is True
  3.container.AddScoped请求单例,一个请求代表一个作用域 IServiceCollection container = new ServiceCollection(); container.AddScoped(); IServiceProvider provider = container.BuildServiceProvider();  //创建一个Scope作用域,那么由这个域创建的实例是独立的(相较Scope1) IServiceScope Scope = provider.CreateScope(); //创建一个Scope1作用域,那么由这个域创建的实例是独立的 IServiceScope Scope1 = provider.CreateScope();  _Interface  interface =Scope.ServiceProvider.GetService<_Interface>(); _Interface  interface2 = Scope1.ServiceProvider.GetService<_Interface>(); bool bResult = object.ReferenceEquals(interface, interface2);  //b is false       三、自带IOC容器(IServiceCollection)基础1.生命周期
  1.瞬时,即时构造,即时销毁 services.AddTransient();
  2.单例,永远只构造一次  services.AddSingleton();
  3.作用域单例,一次请求只构造一个   services.AddScoped();  2.实例解析public TestServiceA() {     Console.WriteLine(#34;{this.GetType().Name}被构造…"); }  public TestServiceB(ITestServiceA iTestServiceA) {     Console.WriteLine(#34;{this.GetType().Name}被构造…"); }  public TestServiceC(ITestServiceB iTestServiceB) {  Console.WriteLine(#34;{this.GetType().Name}被构造…"); }  public TestServiceD() {     Console.WriteLine(#34;{this.GetType().Name}被构造…"); }  public TestServiceE(ITestServiceC serviceC) {    Console.WriteLine(#34;{this.GetType().Name}被构造…"); }  //1.A类构造 //2.B类构造需要A类 //3.C类构造需要B类 //4.D类构造 //5.E类构造需要C类  //瞬时 services.AddTransient(); //单例 services.AddSingleton(); //作用域单例 services.AddScoped(); //瞬时 services.AddTransient(); //瞬时 services.AddTransient();
  第一次请求解析
  1.开始构造A类,因为是瞬时生命周期那么第一次请求就会被构造,然后销毁
  2.在构造B类时需要A类,那么会首先构造A类(因为A类瞬时上一次已经被销毁),然后构造B类为单例
  3.开始构造C,在构造时需要B类,因为B类全局单例,那就会直接构造C为作用域单例
  4.直接构造瞬时D类
  5.开始构造E类,构造式需要C类,因为C类为作用域单例,那么就会直接构造E类为瞬时
  第一次请求结论 输出A 输出A,B 输出C 输出D 输出E
  第二次请求解析
  1.开始构造A类,因为是瞬时生命周期那么第二次请求就会重新被构造,然后销毁
  2.在构造B类时因为在第一次请求时已经构造为单例,所以不再被构造
  3.开始重新构造C,因为C在第二次请求为新的作用域,在构造时需要B类,因为B类全局单例,那就会直接构造C为作用域单例
  4.直接构造瞬时D类
  5.开始构造E类,构造式需要C类,因为C类为作用域单例,那么就会直接构造E类为瞬时
  第二次请求结论
  1.输出A
  2.输出C
  3.输出D
  4.输出E
  如果不想通过构造全部自动注入,能自定义注入
  1.using Microsoft.Extensions.DependencyInjection;
  2.首先注入 IServiceProvider serviceProvider,利用serviceProcider.GetService();生成需要的实例 四、利用AutoFac容器替换自带容器
  1.下载Autofac.Extensions.DependencyInjection和Autofac包
  2.在Program网站启动时替换默认IOC工厂实例为Autofac,UseServiceProviderFactory(new AutofacServiceProviderFactory())
  3.在Startup类中添加方法public void ConfigureContainer(ContainerBuilder services){services.RegisterType().As().SingleInstance();}  //返回值为IServiceProvider  public IServiceProvider ConfigureContainer(ContainerBuilder services)  {   services.Configure(options =>   {       options.CheckConsentNeeded = context => true;       options.MinimumSameSitePolicy = SameSiteMode.None;   });   services.AddSession();   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);   //services.RegisterType().As().SingleInstance();    services.RegisterModule();  } 1.批量注册模块 public class CustomAutofacModule : Module {     //重新load 添加注册服务     //可以实现实例控制     //接口约束    protected override void Load(ContainerBuilder containerBuilder)    {        containerBuilder.Register(c => new CustomAutofacAop());              //设置为属性注入        containerBuilder.RegisterType().As().SingleInstance().PropertiesAutowired();                containerBuilder.RegisterType().As();        containerBuilder.RegisterType().As();        containerBuilder.RegisterType().As();         containerBuilder.RegisterType().As().EnableInterfaceInterceptors();    } } 五、利用AutoFac实现AOP1.基本使用
  1.NuGet安装引用Autofac.Extras.DynamicProxy
  2.引用using Autofac.Extras.DynamicProxy;
  3.创建类库继承自IInterceptor实现接口
  4.自定义的Autofac的AOP扩展  //注册,模块 public class CustomAutofacModule : Module {      //重新load 添加注册服务      //可以实现实例控制      //接口约束     protected override void Load(ContainerBuilder containerBuilder)     {         //注册AOP         containerBuilder.Register(c => new CustomAutofacAop());         //开启aop扩展         containerBuilder.RegisterType().As().EnableInterfaceInterceptors();     } }  public class CustomAutofacAop : IInterceptor {    public void Intercept(IInvocation invocation)    {        Console.WriteLine(#34;invocation.Methond={invocation.Method}");        Console.WriteLine(#34;invocation.Arguments={string.Join(",", invocation.Arguments)}");         invocation.Proceed(); //继续执行         Console.WriteLine(#34;方法{invocation.Method}执行完成了");    } }

5G下凡WiFi何去何从?全析2017无线市场走势无线市场已步入了2017下半年的关键时期,5G网络呼之欲出,4G无限流量备受亲睐,WiFi将迎来哪些机遇和挑战?无线市场纷争不断,普联华为思科等品牌大鳄独揽半壁江山,EDUP360翼联网络2018年新春联欢会热烈举办1月31日晚,深圳市翼联网络有限公司2018年新春联欢会在华强广场大酒店24楼热烈举办,湖北独臂铁人梅立军先生等嘉宾受邀出席了此次盛会。凛冽寒风挡不住似火热情,近百位员工和嘉宾盛装某村千人数据详解2017无线路由器选购十大痛点2017年移动互联网继续高歌猛进,以智能手机可穿戴设备可连网终端等为代表的智能硬件数量持续增长,对家中的无线网络提出了新的承载需求。为此,ZOL(中关村)网络设备频道在近3周内展开天上掉下个WiFi来?无线网卡这么用台式机要上天!21岁重庆小伙小王,在网吧上网玩英雄联盟。玩兴正酣,结果网速卡了一下,直接被人秒杀。小王当时就火了,一把操起鼠标狠狠砸了显示屏。终因拒不赔偿被拘8日。常州18岁少年周某,在网吧上网上WiFi玩网游台式机这招溜溜溜眼看公司小伙伴都能正常办公,小刘的台式机又断网了!张工,帮忙看看嘛。IP冲突?网线故障?接口不良?电脑病毒?忙活半天勉强解决,小刘老张叫苦不迭。租房的小年轻,拿台式机消遣周末的明媚WiFi还能玩这样?到底还是贫穷限制了我的想象!供职于某CBD地下食堂年薪过万的张哥,下班后拖着疲惫身躯,搭乘身价动辄千万的座驾地铁,回到了家。WiFi手机沙发,那个幸福舒坦啊。十八线小县城,几个小伙伴放学后可劲跑,早早功课写完怎么选择一款好的无线网卡?对于喜欢玩吃鸡游戏的朋友们来说,网络卡顿对于游戏的胜负而言无疑是致命的。一般的路由器都会有一个网速衰减机制,如果路由器配置很高,但是却离路由器太远,信号就会衰减太多,那么玩游戏也就齐聚襄阳,翼联助力独臂铁人圆梦想9月16日,来自世界各地的200多名铁三聚集湖北襄阳,积极参加襄阳南漳春秋寨铁人三项赛,继而在南漳春秋寨上演了一场速度与激情的体育盛会。此次参赛由南漳三特古山寨旅游开发有限公司主办4G无线路由器,带给你不一样的体验路由器是我们每个现代人生活中最不可或缺的设备,不过在某些时候,传统的路由器可能就不太灵了,比如刚建好没通网的小区,或是新租的房子还来不及办理宽带网,又或者是某些特殊场合。这种时候若举国同庆,翼联人依然坚守一线金秋十月,踏着如歌的节拍,沐浴在明媚的阳光下,我们如约迎来了祖国69岁华诞!3日,当大家正在享受十一假期和家人团聚或者携三五好友外出旅游的时候,深圳翼联EDUP的部分优秀员工却放弃祝贺深圳翼联EDUP首届产品知识答辩会取得圆满成功为提高全体员工专业知识水平,促进公司的持续健康发展,打造高效的营销团队,深圳翼联EDUP首届产品知识答辩大会于今天下午隆重举行!主持开场公司全体部门包括财务部,营销部,人事行政部,
手机如何恢复出厂设置这段时间去忙于其它方面,很少发帖子。有很多粉丝朋友私信给我说,手机用了几年以后内存都满了,简直不能用了老卡老卡的,怎么处理?今天我就来分享一篇这个问题的帖子,让大家解决这个令人头疼手机文档直接打印,米家连供打印一体机一键直连全家都能用居家办公,延迟开学,开始网课相信很多家长在看到这类消息时就直接蒙了吧,有学生的家庭也一定被打印这件事困扰过,无论是日常的学习资料,还是彩色健康码行程码都得打印。先别慌,首先我们得积海信墨水屏手机发布1799元起售搭载骁龙662昨日晚间,国产家电品牌海信举办了新品发布会,不过这次并不是发布家电产品,而是带来了一款颇为独特的手机新品。海信的这款手机型号为A9,正面采用了一块6。1英寸的单色墨水屏,也就是说它手机与汽车交互,CarPlay和CarLife哪个好用?日更第36551天。大家好,我是大船,今天和大家聊聊手机和汽车的交互。在以前老一点的汽车上,手机和汽车上的车机是不能交互的,汽车的车机一般只有一些操作汽车的功能,缺乏足够的娱乐性,5个手机必备的实用APP,我越用越喜欢哈喽大家好呀,不知道你们的手机一般使用最多的APP是哪些呢?今天我给大家分享5款手机必备的实用APP,我越用越喜欢。01。波点音乐说到手机必备,我觉得听用来音乐的APP是不可少,波IP属地功能上线应同步加强监管近日,为减少冒充热点事件当事人恶意造谣蹭流量等不良行为,确保传播内容真实透明,微博知乎抖音等网络平台纷纷上线显示用户IP属地功能,用户发送内容时显示IP属地,境外显示国家,境内显示天猫公布618助力商家举措首次上线直播间专享权益北京商报讯(记者何倩)5月13日,天猫公布25条天猫618助力商家举措,包括金融补贴物流疏通流量补贴疫情特别举措和技术升级。值得注意的是,天猫618将首次上线直播间专享权益,可叠加OPPOColorOS率先适配安卓13,开发者预览版已上线谷歌将在5月12日凌晨正式发布新一代安卓13系统。今日,OPPOColorOS官方宣布,ColorOS现已适配Android13,首批机型OPPOFindNOPPOFindX5Pr华为鸿蒙系统推出新版本,上线这些实用的新功能华为鸿蒙系统自上线以来就受到了网友的好评,而且有消息称最新的鸿蒙3。0系统将会在今年7月份正式发布,也让广大网友们非常期待。最近,鸿蒙2系统又发布了一个小版本的更新,而且上线了一些荣耀CEO赵明折叠机市场明年将增长510倍,5年后荣耀手机海外出货量超国内品玩5月12日讯,据日经新闻报道,近日,荣耀CEO赵明接受采访时表示,概述了荣耀的发展计划。他说基本上,在去年之后,我们所有的海外市场份额都降到了几乎为零,现在是从头开始的时候了。科技早报中芯国际一季度收入同比增66。9ARM上市后软银计划保留多数股权中芯国际一季度收入同比增66。95月12日,中芯国际发布一季度业绩,其实现营收18。4亿美元,同比增长66。9,环比增长16。6净利润4。47亿美元,同比增长181。5,环比下降1