AutoFac使用方法总结:Part III
生命周期
AutoFac中的生命周期概念非常重要,AutoFac也提供了强大的生命周期管理的能力。
AutoFac定义了三种生命周期:
Per Dependency
Single Instance
Per Lifetime Scope
Per Dependency为默认的生命周期,也被称为’transient’或’factory’,其实就是每次请求都创建一个新的对象
[Fact]
public void per_dependency()
{
var builder = new ContainerBuilder();
builder.RegisterType<MyClass>().InstancePerDependency();
IContainer container = builder.Build();
var myClass1 = container.Resolve<MyClass>();
var myClass2 = container.Resolve<MyClass>();
Assert.NotEqual(myClass1,myClass2);
}
Single Instance也很好理解,就是每次都用同一个对象
[Fact]
public void single_instance()
{
var builder = new ContainerBuilder();
builder.RegisterType<MyClass>().SingleInstance(); IContainer container = builder.Build();
var myClass1 = container.Resolve<MyClass>();
var myClass2 = container.Resolve<MyClass>(); Assert.Equal(myClass1,myClass2);
}
Per Lifetime Scope,同一个Lifetime生成的对象是同一个实例
[Fact]
public void per_lifetime_scope()
{
var builder = new ContainerBuilder();
builder.RegisterType<MyClass>().InstancePerLifetimeScope(); IContainer container = builder.Build();
var myClass1 = container.Resolve<MyClass>();
var myClass2 = container.Resolve<MyClass>(); ILifetimeScope inner = container.BeginLifetimeScope();
var myClass3 = inner.Resolve<MyClass>();
var myClass4 = inner.Resolve<MyClass>(); Assert.Equal(myClass1,myClass2);
Assert.NotEqual(myClass2,myClass3);
Assert.Equal(myClass3,myClass4);
}
[Fact]
public void life_time_and_dispose()
{
var builder = new ContainerBuilder();
builder.RegisterType<Disposable>(); using (IContainer container = builder.Build())
{
var outInstance = container.Resolve<Disposable>(new NamedParameter("name", "out")); using(var inner = container.BeginLifetimeScope())
{
var inInstance = container.Resolve<Disposable>(new NamedParameter("name", "in"));
}//inInstance dispose here
}//out dispose here
}
AutoFac使用方法总结:Part III的更多相关文章
- [转][C#]AutoFac 使用方法总结
AutoFac使用方法总结:Part I 转自:http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ AutoFac是.net平台下 ...
- AutoFac使用方法总结:Part II
事件 AutoFac支持三种事件:OnActivating,OnActivated,OnRelease.OnActivating在注册组件使用之前会被调用,此时可以替换实现类或者进行一些其他的初始化工 ...
- AutoFac使用方法总结:Part I
注册部分 使用RegisterType进行注册 [Fact] public void can_resolve_myclass() { var builder = new ContainerBuilde ...
- AutoFac使用方法总结
AutoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法 ...
- AutoFac使用方法总结四:生命周期续
控制反转(IoC/Inverse Of Control): 调用者不再创建被调用者的实例,由autofac框架实现(容器创建)所以称为控制反转. 依赖注入(DI/Depende ...
- AutoFac使用方法总结二:事件与依赖循环
事件 AutoFac支持三种事件:OnActivating,OnActivated,OnRelease.OnActivating在注册组件使用之前会被调用,此时可以替换实现类或者进行一些其他 ...
- AutoFac使用方法总结一:注册
AutoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法 ...
- AutoFac使用方法总结三:生命周期
生命周期 AutoFac中的生命周期概念非常重要,AutoFac也提供了强大的生命周期管理的能力. AutoFac定义了三种生命周期: Per Dependency Single I ...
- AutoFac Ioc依赖注入容器
本文原著:牛毅 原文路径 http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ 理解IOC容器请看下图: 没有使用IOC容器的情况 ...
随机推荐
- uva 1151 - Buy or Build poj 2784 Buy or Build(最小生成树)
最小生成树算法简单 只是增加了一些新的东西,对于需要最小生成树算法 和中 并检查使用的一系列 还有一些更深入的了解. 方法的一些复杂问题 #include<cstdio> #include ...
- php使用http请求头实现文件下载
众所周知php对http协议的依赖特别强,像java或者asp.net在某些情况下可以不依赖http例如asp.net的winform,对php来说文件下载可以使用http的请求头加上php的IO就可 ...
- 最终结算“Git Windowsclient保存username与password”问题
Git - How to use netrc file on windows - Stack Overflow 这就是正确答案,我们已经验证过了,以下具体描写叙述一下解决方法: 1. 在Windows ...
- WCF(1)----服务创建
本例中,我们通过一个关于Camera的服务为例子来说明WCF的开发流程,该服务比较简单,只是用来实现对Camera的添加,枚举,删除等操作. 详细步骤如下: 1:创建一个WCF Service Lib ...
- 部署、收回和删除解决方式----STSADM和PowerShell
部署.收回和删除解决方式----STSADM和PowerShell 由于近期总是要部署wsp解决方式,所以常常要用到命令行或者PowerShell.所以有必要将命令集中放在这里.在部署 ...
- A Game of Thrones(9) - Tyrion
Somewhere in the great stone maze(迷宫:迷惑) of Winterfell, a wolf howled. The sound hung over the castl ...
- leetcode 之 Permutation Sequence
Permutation Sequence The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and ...
- SE 2014年4月3日
一 OSPF协议都支持哪些特殊区域?每种特殊区域都有什么特点. OSPF协议支持的特殊区域主要有stub区域.totally stub区域以及nssa区域,其中stub区域一般出现在末梢网络,即它的 ...
- zoj1610(线段树)
题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 题意:在0-8000长的线段里面,按先后次序依次覆盖颜色, ...
- hadoop日志分析
一.项目要求 本文讨论的日志处理方法中的日志,仅指Web日志.事实上并没有精确的定义,可能包含但不限于各种前端Webserver--apache.lighttpd.nginx.tomcat等产生的用户 ...