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

鞍山吧最新消息郑州seo优化外包热狗网

鞍山吧最新消息,郑州seo优化外包热狗网,wordpress上一个,国际最新时事新闻热点1.概述 autoFac的生命周期 序号名称说明1InstancePerDependency每次请求都创建一个新的对象2InstancePerLifetimeScope同一个Lifetime生成的对象是同一个实例3SingleInstance每次都用同一个对象 2.注 InstancePerLifetimeScope 同一个Lifetime生成的对象是同一个实例&#x…

1.概述 autoFac的生命周期

序号名称说明
1InstancePerDependency每次请求都创建一个新的对象
2InstancePerLifetimeScope同一个Lifetime生成的对象是同一个实例
3SingleInstance每次都用同一个对象

2.注 InstancePerLifetimeScope

同一个Lifetime生成的对象是同一个实例,这个理解起来有点不确定,什么叫“同一个Lifetime生成的对象”,就是生成过的几次,比如在一个程序中,只调用一次生成。

var builder = new ContainerBuilder();builder.RegisterType<A>().As<IA>().InstancePerLifetimeScope();IContainer container = builder.Build();

只调用 一次,上面的注册,后面无论多少次获取,都是一个对象。

IA a = container.Resolve<IA>();

试验代码

 

class T2{static IContainer container;static T2(){var builder = new ContainerBuilder();builder.RegisterType<A>().As<IA>().InstancePerLifetimeScope();container = builder.Build();}public void fun(){for (int i = 0; i < 3; i++){IA a = container.Resolve<IA>();a.fun();}}}

3.那么“同一个Lifetime生成的对象”指创建过一次,那么这个创建指的是“InstancePerLifetimeScope”还是“Build”

于是有了下面的试验,“InstancePerLifetimeScope”一次,但是每次获取对象前都“Build”

builder = new ContainerBuilder();builder.RegisterType<A>().As<IA>().InstancePerLifetimeScope();
var container = builder.Build();

结果报了如下异常

 异常:

System.InvalidOperationException:“Build() or Update() can only be called once on a ContainerBuilder

 异常翻译:

System.InvalidOperationException: " Build()或Update()只能被ContainerBuilder调用一次

只能调用一次,那么“InstancePerLifetimeScope”和“Build”的调用次数只能是相同的,要么都同时一次,要么都同时多次。

完整代码

class T3{static ContainerBuilder builder;static T3(){builder = new ContainerBuilder();builder.RegisterType<A>().As<IA>().InstancePerLifetimeScope();}public void fun(){var container = builder.Build();for (int i = 0; i < 3; i++){IA a = container.Resolve<IA>();a.fun();}}}

4.另外两种生命周期,都很好理解,"SingleInstance"相当于单件,“InstancePerDependency”相当于每次都创建。(如果没有描述生命周,默认也是这个:builder.RegisterType<A>().As<IA>())

InstancePerDependency(每次使用都是一个新的对象)

static void Main(string[] args){Console.WriteLine();var builder = new ContainerBuilder();builder.RegisterType<A>().As<IA>().InstancePerDependency();IContainer container = builder.Build();for (int i = 0; i < 3; i++){IA a = container.Resolve<IA>();a.fun();}Console.ReadKey();}

 SingleInstance(多次获取使用的是一个对象)

static void Main(string[] args){Console.WriteLine();var builder = new ContainerBuilder();builder.RegisterType<A>().As<IA>().SingleInstance();IContainer container = builder.Build();for (int i = 0; i < 3; i++){IA a = container.Resolve<IA>();a.fun();}Console.ReadKey();}

6.对比试验

生命周期对象中创建类中创建
InstancePerDependency每次获取的都是新对象每次获取的都是新对象
InstancePerLifetimeScope在创建对象的容器中是一个对象每次获取的都是新对象
SingleInstance在创建对象的容器中是一个对象每次获取的都是新对象

这里创建指:build

var builder = new ContainerBuilder();builder.RegisterType<A>().As<IA>())container = builder.Build();

这里的使用指:resolve

IA a = container.Resolve<IA>();a.fun();

在对象中创建,指在构造函数中创建,每创建一个对象,就创建一次。

在类中创建,指在静态类中创建,无论多少个类,指创建一次。

代码

using Autofac;
using Autofac.Builder;
using System;
using System.Collections.Generic;namespace autoFac生命周期2
{class Program{static void Main(string[] args){Console.WriteLine();Program p = new Program();p.main();Console.ReadKey();}private void main(){foreach (EnumLeftFun enumLeftFun in Enum.GetValues(typeof(EnumLeftFun))){T.enumLeftFunMy = enumLeftFun;Console.WriteLine("\n------------"+enumLeftFun+"--------------------------------");test1();test2();}//test3();}private void test1(){Console.WriteLine("    test1 每个对象创建一次");T1 t1 = new T1();t1.fun();T1 t2 = new T1();t2.fun();}private void test2(){Console.WriteLine("    test2 每个类创建一次");T2 t21 = new T2();t21.fun();T2 t22 = new T2();t22.fun();}private void test3(){T3 t3 = new T3();t3.fun();T3 t31 = new T3();t31.fun();}class T2 : T{static IContainer container;static T2(){var builder = new ContainerBuilder();T.leftSelect(builder.RegisterType<A>().As<IA>());container = builder.Build();}public void fun(){for (int i = 0; i < 3; i++){IA a = container.Resolve<IA>();a.fun();}}}class T3{static ContainerBuilder builder;static T3(){builder = new ContainerBuilder();T.leftSelect(builder.RegisterType<A>().As<IA>());}public void fun(){var container = builder.Build();for (int i = 0; i < 3; i++){IA a = container.Resolve<IA>();a.fun();}}}class T1:T{IContainer container;public T1(){var builder = new ContainerBuilder();leftSelect(builder.RegisterType<A>().As<IA>());builder.RegisterType<A>().As<IA>().SingleInstance();container = builder.Build();}public void fun(){for (int i = 0; i < 3; i++){IA a = container.Resolve<IA>();a.fun();}}}delegate IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> delegateFun(IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> registrationBuilder);public enum EnumLeftFun{InstancePerDependency,InstancePerLifetimeScope,SingleInstance}class T{static Dictionary<EnumLeftFun, delegateFun> keyValuePairs = new Dictionary<EnumLeftFun, delegateFun>();public static EnumLeftFun enumLeftFunMy;static T(){keyValuePairs.Add(EnumLeftFun.InstancePerDependency, InstancePerDependency);keyValuePairs.Add(EnumLeftFun.InstancePerLifetimeScope, InstancePerLifetimeScope);keyValuePairs.Add(EnumLeftFun.SingleInstance, SingleInstance);}static public IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> leftSelect(IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> registrationBuilder){return keyValuePairs[enumLeftFunMy](registrationBuilder);}static protected IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> InstancePerDependency(IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> registrationBuilder){return registrationBuilder.InstancePerDependency();}static protected IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> InstancePerLifetimeScope(IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> registrationBuilder){return registrationBuilder.InstancePerLifetimeScope();}static protected IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> SingleInstance(IRegistrationBuilder<IA, ConcreteReflectionActivatorData, SingleRegistrationStyle> registrationBuilder){return registrationBuilder.SingleInstance();}}}interface IA{void fun();}class A : IA{static int index = 0;private int myIndex;public A(){this.myIndex = ++index;}public void fun(){Console.WriteLine("myIndex:" + myIndex);}}
}

运行结果

------------InstancePerDependency--------------------------------test1 每个对象创建一次
myIndex:1
myIndex:1
myIndex:1
myIndex:2
myIndex:2
myIndex:2test2 每个类创建一次
myIndex:3
myIndex:4
myIndex:5
myIndex:6
myIndex:7
myIndex:8------------InstancePerLifetimeScope--------------------------------test1 每个对象创建一次
myIndex:9
myIndex:9
myIndex:9
myIndex:10
myIndex:10
myIndex:10test2 每个类创建一次
myIndex:11
myIndex:12
myIndex:13
myIndex:14
myIndex:15
myIndex:16------------SingleInstance--------------------------------test1 每个对象创建一次
myIndex:17
myIndex:17
myIndex:17
myIndex:18
myIndex:18
myIndex:18test2 每个类创建一次
myIndex:19
myIndex:20
myIndex:21
myIndex:22
myIndex:23
myIndex:24

http://www.fp688.cn/news/144432.html

相关文章:

  • 西双版纳网站建设常见的搜索引擎有哪些
  • 网站服务器要求站长工具大全集
  • 广州定制网站建设厦门网站seo外包
  • 国外做btc的网站百家号优化
  • wordpress Apache升级北京seo网站开发
  • 都匀网站开发的公司今日国内新闻大事20条
  • 网站可信淘宝代运营1个月多少钱
  • 网站发送邮件连接怎么做百度账号快速注册入口
  • 俄罗斯代购网站免费二级域名平台
  • 35互联做网站好吗东莞营销网站建设
  • 网站公告模板代码宁德市公共资源交易中心
  • 建设银行网站网页丢失关键词优化推广公司
  • 英文b2c网站建设百度网页网址
  • 珠海市网站建设公司推广资源seo
  • 深圳罗湖网站设计搭建网站
  • 网站建设发布设需求抖音seo搜索引擎优化
  • 烟台网站制作手机端seo
  • 做直播网站宽带朋友圈营销
  • 国内做网站的公司二级域名网址查询
  • 江苏神禹建设有限公司网站资源网站优化排名软件公司
  • 宿迁网站建设报价各大搜索引擎提交入口
  • 天津网站建设座机号灰色行业怎么推广引流
  • 怎样做联盟网站想做电商怎么入手
  • 外贸网站建设怎么制作聊城seo整站优化报价
  • 网站制作源码百度关键词优化推广
  • 深圳公司 网站建设香港疫情最新情况
  • 网站管理建站搜索引擎优化策略不包括
  • 教你做吃的网站江门seo网站推广
  • 大理公司网站建设百度推荐现在为什么不能用了
  • 网站成本网站流量统计