autofac文档:实例生命周期
2012-06-09 20:32
225 查看
AutoFac文档
目录
开始Registering components
控制作用域和生命周期
用模块结构化Autofac
xml配置
与.net集成
深入理解Autofac
指导
关于
词汇表
实例生命周期
实例生命周期决定的在同一个服务的每个请求中实例是如何共享的。当请求一个服务的时候,Autofac会返回一个单例 (single instance作用域), 一个新的对象 (per lifetime作用域) 或者在某种上下文环境中的单例。比如 一个线程 或者一个HTTP请求 (per lifetime 作用域)。
这条规则适用于显示调用Resolve从容器中检索对象或者容器中为了满足依赖而隐式实现的对象。
更深入的探讨请参考an Autofac Lifetime Primer.
Per Dependency
在其他容器中也称作瞬态或者工厂,使用Per Dependency作用域,服务对于每次请求都会返回单独的实例。在没有指定其他参数的情况下,这是默认是作用域。
builder.RegisterType<X>(); // or builder.RegisterType<X>().InstancePerDependency();
Single Instance
使用Single Instance作用域,所有对父容器或者嵌套容器的请求都会返回同一个实例。builder.RegisterType<X>().SingleInstance();
Per Lifetime Scope
这个作用域适用于嵌套的生命周期。一个使用Per Lifetime 作用域的component在一个 nested lifetime scope内最多有一个实例。当对象特定于一个工作单元时,这个非常有用。比如,一个HTTP请求,每一个工作单元都会创建一个nested lifetime,如果在每一次HTTP请求中创建一个nested lifetime,那么其他使用 per-lifetime 的component在每次HTTP请求中只会拥有一个实例。
这种配置模型在其他容器中等价于per-HTTP-request, per-thread等。
builder.RegisterType<X>().InstancePerLifetimeScope();
的ASP.NET和WCF集成中,每一次web请求或者方法调用,InstancePerLifetimeScope会被默认附加到component上
上下文的
上下文作用域和per-lifetime作用域类似,但是对可见性提供更多显示的控制。在大多数程序中,同一层次的容器嵌套代表一个工作单元,如果需要多层嵌套(例如global->request->transation),可以使用标签确保component在多层结构中的某一层共享。
builder.RegisterType<X>().InstancePerMatchingLifetimeScope(MyContextHierarchy.UserSession);
提供的标签和生命周期作用域是对应的。
var userSessionLifetime = container.BeginLifetimeScope(); userSessionLifetime.Tag = MyContextHierarchy.UserSession;
相关文章推荐
- autofac 实例生命周期
- Autofac官方文档(十)【控制作用域和生命周期】
- Autofac官方文档(十一)【使用生命周期范围】
- Autofac官方文档(十五)【生命周期事件】
- Autofac实例生命周期
- Autofac官方文档(十二)【实例范围】
- Gauge中文文档(11)—项目实例
- Python3.2官方文档翻译--实例对象和方法对象
- 测试驱动需求分析--需求文档评审实例
- Java实现web在线预览office文档与pdf文档实例
- Jsoup解析HTML、加载文档等实例
- ElasticSearch操作实例大全---文档结构操作(1)
- Cocos Creator 生命周期回调(官方文档摘录)
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
- Singleton单例模式是最简单的设计模式,它的主要作用是保证在程序执行生命周期中,使用了单类模式的类仅仅能有一个实例对象存在。
- 通过文档事件处理程序引入JavaScript脚本代码实例
- windows RAC 删除失败节点,添加节点实例操作文档
- VUE实例的生命周期与VUE组件的生命周期
- java中的静态变量和实例变量的生命周期
- Jquery Ajax读取XML文档实现联动下拉框实例