• 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 就是用来覆盖默认的清理行为的

  • 相关阅读:
    【压测】压力测试工具siege的用法
    五大python自动化框架学习
    自动化“监视”剩余内存&句柄数
    iperf 使用小窍门
    测试 USB 的 读写
    pppoe环境下的mtu和mss的配合问题
    您保存的文件格式可能含有不兼容的功能 是否已保持工作簿这种格式
    pycharm2018永久破解的方法
    Linux如何快速跳转到文档开头或者末尾
    打造自己的Ubuntu渗透利器--Nmap、Zenmap、Sqlmap安装
  • 原文地址:https://www.cnblogs.com/GnailGnepGnaw/p/10753629.html
Copyright © 2020-2023  润新知