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(); }
在类型注册成功后触发,也就是在调用ContainerBuilder的Build方法时,其方法内部触发的。OnRegistered的委托参数类型为ComponentRegisteredEventArgs,其中包含了类型注册后的底层配置信息,此处不对配置信息作介绍,平常通常不会使用这写参数。若是咱们但愿在类型注册到autofac中后执行一些操做,咱们能够经过OnRegistered事件达到目的ui
OnPreparing(注册以后类型实例化以前)spa
在调用Resolve时触发,具体触发时机,是根据Resolve的类型获取到类型相关配置时触发的,而这时,类型对象尚未实例化.在OnPreparing中,咱们能够修改传入的Parameter值,甚至能够以此修改实际调用的构造方法(经过Resolve对象构造方法选择原则)code
OnActivating(在具体实例使用)对象
在注册组件使用以前会被调用,此时能够替换实现类或者进行一些其余的初始化工做blog
OnActivated接口
在组件被彻底建立的时候调用一次。在这个时候你能够执行程序级别的一些工做(这些工做依赖于对象被彻底建立)生命周期
OnRelease事件
在组件释放以后会被调用,替代组件的标准清理方法。实现了IDisposable 接口的标准清理方法(没有标记为ExternallyOwned) 经过调用Dispose 方法。没有实现IDisposable或者被标记为ExternallyOwned的清理方法是一个空函数-不执行任何操做。OnRelease 就是用来覆盖默认的清理行为的资源