Autofac之生命周期和事件
Autofac为注册的类型对象提供了一套生命周期事件,覆盖了一个类型从注册到最后“释放”的一套事件。有了这些事件,我们可以相对方便的在类型对象的各个阶段进行AOP操作。
builder.RegisterType<Worker>().As<IPerson>()
.OnRegistered(e => Console.WriteLine("调用ContainerBuilder的Build方法时触发OnRegistered事件!"))
.OnPreparing(e => Console.WriteLine("在调用Resolve时触发,具体触发时机,是根据Resolve的类型获取到类型相关配置时触发的,而这时,类型对象还没有实例化!"))
.OnActivating(e => Console.WriteLine("在创建之前调用!"))
.OnActivated(e => Console.WriteLine("创建之后调用!"))
.OnRelease(e => Console.WriteLine("在释放占用的资源之前调用!"));
using (var container = builder.Build())
{
var obj1 = container.Resolve<IPerson>();
obj1.Say();
}

OnRegistered(注册之后触发)
在类型注册成功后触发,也就是在调用ContainerBuilder的Build方法时,其方法内部触发的。OnRegistered的委托参数类型为ComponentRegisteredEventArgs,其中包含了类型注册后的底层配置信息,此处不对配置信息做介绍,日常一般不会使用这写参数。如果我们希望在类型注册到autofac中后执行一些操作,我们可以通过OnRegistered事件达到目的
OnPreparing(注册之后类型实例化之前)
在调用Resolve时触发,具体触发时机,是根据Resolve的类型获取到类型相关配置时触发的,而这时,类型对象还没有实例化.在OnPreparing中,我们可以修改传入的Parameter值,甚至可以以此修改实际调用的构造方法(通过Resolve对象构造方法选择原则)
OnActivating(在具体实例使用)
在注册组件使用之前会被调用,此时可以替换实现类或者进行一些其他的初始化工作
OnActivated
在组件被完全创建的时候调用一次。在这个时候你可以执行程序级别的一些工作(这些工作依赖于对象被完全创建)
OnRelease
在组件释放之后会被调用,替代组件的标准清理方法。实现了IDisposable 接口的标准清理方法(没有标记为ExternallyOwned) 通过调用Dispose 方法。没有实现IDisposable或者被标记为ExternallyOwned的清理方法是一个空函数-不执行任何操作。OnRelease 就是用来覆盖默认的清理行为的
Autofac之生命周期和事件的更多相关文章
- autofac 实例生命周期
转自逆心博客园 autofac 实例生命周期 实例生命周期决定在同一个服务的每个请求的实例是如何共享的. 当请求一个服务的时候,Autofac会返回一个单例 (single instance作用域), ...
- django生命周期和事件委派
这是事件委派如果不用事件委派 直接绑定的话,新添加的按钮不会有删除或者编辑的功能 上面是事件委派的代码 新添加的编辑按钮可以弹出123 django生命周期: 这是Django的生命周期 首先会通 ...
- React生命周期及事件详解
引用原文:http://blog.csdn.net/limm33/article/details/50942808 一.组件的详细说明和生命周期ComponentSpecs and Lifecycle ...
- autofac 注入生命周期
创建实例方法 1.InstancePerDependency 对每一个依赖或每一次调用创建一个新的唯一的实例.这也是默认的创建实例的方式. 官方文档解释:Configure the component ...
- 微信小程序之结构目录、视图层、双线程模型、生命周期、事件传递冒泡、组件、request、登录授权及支付
结构目录与配置介绍 视图层与基础语法 双线程模型 生命周期 事件.传递和冒泡 组件.自定义组件.组件事件传递页面 Request.路由跳转.本地存储 登录(后端实现) | 授权(后端实现) 支付(后端 ...
- 微信小程序生命周期,事件
目录 双线程模型 小程序中 app.js 中的生命周期 小程序的页面的生命周期 小程序的事件 双线程模型 像 Vue 的双向数据绑定 总结: 在渲染层将wxml文件与wxss文件转成js对象,也就是虚 ...
- Autofac实例生命周期
1.默认,每次请求都会返回一个实例 builder.RegisterType<X>().InstancePerDependency(); 2.Per Lifetime Scope:这个作用 ...
- WinForm 生命周期, WinForm 事件执行顺序
1.窗体启动: Control.HandleCreatedControl.BindingContextChangedForm.LoadControl.VisibleChangedForm.Activa ...
- 网页生命周期-PageLoad事件
PageLoad事件的作用 l 页面载入是执行的处理命令 l 可以动态创建控件 l 可以设置现有控件的属性和状态 l 常用来设置数据库的连接 l 每次页面载入都会执行
随机推荐
- android Button上面的英文字符串自动大写的问题解决
xml文件中加入: android:textAllCaps="false"
- Windows密钥容器和证书的关系
其实CSP主要是对容器里的密钥对操作的,和证书关系不大. 容器里的密钥对有两种类型:一种是AT_KEYEXCHANGE,表示加密的密钥对,一种是AT_SIGNATURE表示签名的密钥对. 由于美国的出 ...
- python selenium Chrome模拟手机浏览器
在做移动端页面测试时可以利用Chrome mobile emulation 辅助完成页面的适配问题,但是目前手机市场上的型号居多我们也没有办法通过人工的模式一一的去适配,所以这里考虑到通过自动化的模式 ...
- Android - JSON Parser Tutorial
Android provides four different classes to manipulate JSON data. These classes are JSONArray,JSONObj ...
- day12.生成器;wraps初识
生成器 在 Python 中,使用了 yield 的函数被称为生成器(generator). 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器. 在 ...
- Imcash科普:没有网络也可以转账比特币?你可能有些误解
近日,据Bitcoinist消息,比特币解决方案开发商CoinKite联合创始人Rodolfo Novak和OpenBazaar联合创始人Sam Patterson在推特上宣布,两人不借助互联网和卫星 ...
- web服务-2、四种方法实现并发服务器-多线程,多进程,协程,(单进程-单线程-非堵塞)
知识点:1.使用多线程,多进程,协程完成web并发服务器 2.单进程-单线程-非堵塞也可以实现并发服务器 1.多进程和协程的代码在下面注释掉的部分,我把三种写在一起了 import socket im ...
- SQL Server Report Server 报表用户权限T-SQL查询
/************************************************************************** 查询用户在报表上的权限 ************ ...
- Codeforces --- 982C Cut 'em all! DFS加贪心
题目链接: https://cn.vjudge.net/problem/1576783/origin 输入输出: ExamplesinputCopy42 44 13 1outputCopy1input ...
- (转)RBAC权限管理
RBAC 模型作为目前最为广泛接受的权限模型 角色访问控制(RBAC)引入了Role的概念,目的是为了隔离User(即动作主体,Subject)与Privilege(权限,表示对Resource的一个 ...