1.生命周期概述
ID | 名称 | 说明 |
1 | InstancePerDependency | 每次都重新创建 |
2 | InstancePerLifetimeScope | 同一域,创建一次 |
3 | SingleInstance | 创建一次 |
2.试验结果:通过使用的“生成方法”和“是否同一域”两个维度进行设置。
是否 同一域 | 生命周期设置差别 | 对象 | 执行 结果 |
同一域 | A a = container.Resolve<A>(); a.fun(); | ||
InstancePerDependency | 多个对象 | 生命周期试验 我的序号:0 我的序号:1 线程拆分后 我的序号:2 我的序号:3 | |
InstancePerLifetimeScope | 一个对象 | 生命周期试验 我的序号:0 我的序号:0 线程拆分后 我的序号:0 我的序号:0 | |
SingleInstance | 生命周期试验 我的序号:0 我的序号:0 线程拆分后 我的序号:0 我的序号:0 | ||
不同域 | using (ILifetimeScope lifetime = container.BeginLifetimeScope()) { A a = lifetime.Resolve<A>(); a.fun(); } | ||
InstancePerDependency | 多个对象 | 生命周期试验 我的序号:0 我的序号:1 线程拆分后 我的序号:2 我的序号:3 | |
InstancePerLifetimeScope | 生命周期试验 我的序号:0 我的序号:1 线程拆分后 我的序号:2 我的序号:3 | ||
SingleInstance | 一个对象 | 生命周期试验 我的序号:0 我的序号:0 线程拆分后 我的序号:0 我的序号:0 |
代码
using Autofac;
using System;
using System.Threading.Tasks;
namespace LifetimeScopeTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("生命周期试验");
Program p = new Program();
p.main();
Console.ReadKey();
}
static IContainer container;
private void main()
{
ContainerBuilder builder = new ContainerBuilder();
//builder.RegisterType<A>().As<A>().InstancePerDependency();
//builder.RegisterType<A>().As<A>().InstancePerLifetimeScope();
builder.RegisterType<A>().As<A>().SingleInstance();
container = builder.Build();
test1();
test2();
Console.WriteLine("线程拆分后");
Task t1 = Task.Factory.StartNew(() => { test1(); });
Task t2 = Task.Factory.StartNew(() => { test2(); });
Task.WaitAll(t1, t2);
}
private void test1()
{
容器 rqa = new 容器();
rqa.fun();
}
private void test2()
{
容器 rqa = new 容器();
rqa.fun();
}
public class 容器
{
public void fun()
{
using (ILifetimeScope lifetime = container.BeginLifetimeScope())
{
A a = lifetime.Resolve<A>();
a.fun();
}
/*
A a = container.Resolve<A>();
a.fun();
*/
}
}
class A
{
public int myNo = 0;
static int index = 0;
public A()
{
myNo = index++;
}
public void fun()
{
Console.WriteLine("我的序号:" + myNo);
}
}
}
}