AutoFac 生命周期 试验

1.生命周期概述

ID 名称 说明
1 InstancePerDependency 每次都重新创建
2 InstancePerLifetimeScope 同一域,创建一次
3 SingleInstance 创建一次

2.试验结果:通过使用的“生成方法”和“是否同一域”两个维度进行设置。

是否

同一域

生命周期设置差别 对象 执行 结果
同一域 A a = container.Resolve();
                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.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().As().InstancePerDependency();
            //builder.RegisterType().As().InstancePerLifetimeScope();
            builder.RegisterType().As().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.fun();
                }
                /*
                A a = container.Resolve();
                a.fun();
                */
            }
        }
        class A
        {
            public int myNo = 0;
            static int index = 0;
            public A()
            {
                myNo = index++;
            }
            public void fun()
            {
                Console.WriteLine("我的序号:" + myNo);
            }
        }
    }
}

你可能感兴趣的:(c#,开发语言,autofac,生命周期试验)