InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例

SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;

InstancePerDependency:默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象;

验证方法实现逻辑:在类的构造函数中,给属性赋值(GUID),通过判断属性值是否一致来判断 三种生命周期的效果。

先上图看结果:

1、InstancePerLifetimeScope

2、SingleInstance

3、InstancePerDependency

整块代码实现如下:

using Autofac;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace SimpleAutofacConsole
{
class Program
{
static void Main(string[] args)
{
//IAnimal animal = new Tiger();
//animal.Show("普通new()对象"); var builder = new ContainerBuilder();
var dependencyRegistrar = new DependencyRegistrar();//(IDependencyRegistrar)Activator.CreateInstance(typeof(IDependencyRegistrar));
dependencyRegistrar.Register(builder, null); var container = builder.Build(); var animalIOC = container.Resolve<IAnimal>();
//animalIOC.Show("Autofac方式实现new()对象");
Console.WriteLine(animalIOC.Id); var animalIOC2 = container.Resolve<IAnimal>();
//animalIOC2.Show("第二次从容器中实例化");
Console.WriteLine(animalIOC2.Id); Console.WriteLine("开启新的生命周期");
ILifetimeScope inner = container.BeginLifetimeScope();
var myClass3 = inner.Resolve<IAnimal>();
Console.WriteLine(myClass3.Id);
var myClass4 = inner.Resolve<IAnimal>();
Console.WriteLine(myClass4.Id); //var animalIOC = container.Resolve<Dog>();
//animalIOC.Show("Autofac方式实现new()对象"); Console.ReadLine();
}
}
public interface IAnimal
{
void Show(string name);
string Id { get; set; }
}
public class Tiger : IAnimal
{
private string _Id;
public string Id { get { return this._Id; } set { Id = this._Id; } }
public Tiger()
{
_Id = Guid.NewGuid().ToString();
} public void Show(string name)
{
Console.WriteLine("老虎说:" + name);
}
}
public class Dog : IAnimal
{
public string Id { get { return Guid.NewGuid().ToString(); } set { } } public void Show(string name)
{
Console.WriteLine("狗狗说:" + name);
}
}
public class DependencyRegistrar : IDependencyRegistrar
{
public int Order { get { return 0; } } public void Register(ContainerBuilder builder, ITypeFinder typeFinder)
{
// InstancePerLifetimeScope 同一个Lifetime生成的对象是同一个实例
// SingleInstance 单例模式,每次调用,都会使用同一个实例化的对象;每次都用同一个对象
// InstancePerDependency 默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象
builder.RegisterType<Tiger>().As<IAnimal>().InstancePerLifetimeScope();
//builder.RegisterType<Dog>().As<IAnimal>();//.PreserveExistingDefaults();
}
} public interface IDependencyRegistrar
{
void Register(ContainerBuilder builder,ITypeFinder typeFinder); int Order { get; }
} public interface ITypeFinder
{
IList<Assembly> GetAssemblies(); IEnumerable<Type> FindClassesOfType(Type assignTypeFrom, bool onlyConcreteClasses = true); IEnumerable<Type> FindClassesOfType(Type assignTypeFrom, IEnumerable<Assembly> assemblies, bool onlyConcreteClasses = true); IEnumerable<Type> FindClassesOfType<T>(bool onlyConcreteClasses = true); IEnumerable<Type> FindClassesOfType<T>(IEnumerable<Assembly> assemblies, bool onlyConcreteClasses = true);
}
}

  

Autofac学习之三种生命周期:InstancePerLifetimeScope、SingleInstance、InstancePerDependency的更多相关文章

  1. Autofac学习之三种生命周期:InstancePerLifetimeScope、SingleInstance、InstancePerDependency 【转载】

    InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例 SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象:每次都用同一个对象: In ...

  2. DataSnap 2009 系列之三 (生命周期篇)

    DataSnap 2009 系列之三 (生命周期篇) DataSnap 2009的服务器对象的生命周期依赖于DSServerClass组件的设置 当DSServer启动时从DSServerClass组 ...

  3. Vue – 基础学习(1):对生命周期和钩子函的理解

    一.简介 先贴一下官网对生命周期/钩子函数的说明(先贴为敬):所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周 ...

  4. JAVA CDI 学习(2) - Scope 生命周期

    在上一节中,我们已经知道了如何用@Inject实现基本注入,这一节研究Bean实例注入后的“生命周期”,web application中有几种基本的生命周期(不管哪种编程语言都类似) 1.Applic ...

  5. Autofac容器对象实例的几种生命周期类型

    实例范围决定了如何在同一服务的请求之间共享实例. 请注意,您应该熟悉生命周期范围的概念,以便更好地理解此处发生的情况. 当请求服务时,Autofac可以返回单个实例(单实例作用域),新实例(每个依赖作 ...

  6. IoC之AutoFac(三)——生命周期

    阅读目录 一.Autofac中的生命周期相关概念 二.创建一个新的生命周期范围 三.实例周期范围 3.1   每个依赖一个实例(InstancePerDependency) 3.2  单个实例(Sin ...

  7. [翻译] Autofac 控制范围和生命周期

    原文链接:http://docs.autofac.org/en/latest/lifetime/index.html Lifetime 是指服务的实例在程序中存活多久 – 从最初的实例化到清理(dis ...

  8. android学习笔记 activity生命周期&任务栈&activity启动模式

    activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...

  9. iOS学习笔记—ViewController/生命周期

    ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...

随机推荐

  1. String类的源码分析

    之前面试的时候被问到有没有看过String类的源码,楼主当时就慌了,回来赶紧补一课. 1.构造器(构造方法) String类提供了很多不同的构造器,分别对应了不同的字符串初始化方法,此处从源码中摘录如 ...

  2. nmcli命令大集合

    nmcli命令 地址配置工具:nmcli nmcli  device  查看所有网卡的信息 nmcli  device  status 和numcli device 相同 nmcli  device ...

  3. asp.net core后台系统登录的快速构建

    登录流程图 示例预览 构建步骤 当然,你也可以直接之前前往coding仓库查看源码,要是发现bug记得提醒我啊~ LoginDemo地址 1. 首先你得有一个项目 2. 然后你需要一个登录页面 完整L ...

  4. 【运维】CPU负载

    最近对我的本本(4核8线程)用top命令看系统状况出现了CPU利用率超过200%的情况,非常诧异,查了下相关资料,把这个问题弄清楚了.首先来分析下CPU Load load average: 0.09 ...

  5. Excel更改单元格格式后无效

    问题描述: 比如修改了数据的自定义显示格式(日期显示 yyyy"年"m"月",手机号分段000-0000-0000),应用后发现只有部分生效,或者都不生效,再检 ...

  6. zoj1002 Fire Net

    Fire Net Time Limit: 2 Seconds      Memory Limit: 65536 KB Suppose that we have a square city with s ...

  7. Vue实现勾选后向数组都添加

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. 使用Entify Framework 6.x的事务操作

    public void TransactionsTest() { using (var context = new testContext()) { //使用EF事务 在vs2013中先升级Entit ...

  9. haproxy + keepalived 实现网站高可靠

    haproxy 1的配置文件,包括 keepalived 和 haproxy 的配置,分别如下: [haproxy 1的keepalived 配置文件]  /etc/keepalived/keepal ...

  10. 【记录】Spring项目转化为Spring Web项目

    前言 在将Spring项目转化为Spring Mvc项目时出现了点问题,总是无法成功部署,查阅资料也并没有找到一个完美的解决方案,最后是参考在idea中创建maven web app项目后的目录才成功 ...