Autofac - 对象解析时的全局回调

时间:2012-07-26 05:37:28

标签: autofac

如何在Autofac容器上注册全局回调,每当解析任何对象时都会触发该回调?

我想使用反射并检查对象是否有一个名为Initialize()的方法,如果有,则调用它。我希望它是鸭子类型,即不需要接口。

谢谢!

1 个答案:

答案 0 :(得分:14)

在Autofac中,您可以使用IComponentRegistration界面订阅各种终身事件:

  • OnActivating
  • OnActivated
  • OnRelease

您可以通过创建IComponentRegistration并覆盖Module方法获取AttachToComponentRegistration个实例:

public class EventModule : Module
{
    protected override void AttachToComponentRegistration(
        IComponentRegistry componentRegistry, 
        IComponentRegistration registration)
    {
        registration.Activated += OnActivated;
    }

    private void OnActivated(object sender, ActivatedEventArgs<object> e)
    {
        e.Instance.GetType().GetMethod("Initialize").Invoke(e.Instance, null);
    }
}

现在您只需要在容器构建器中注册模块:

var builder = new ContainerBuilder();
builder.RegisterModule<EventModule>();

并且在每个组件激活之后将调用OnActivated方法,无论您在哪个模块中注册该组件。