autofac实例初始化通知

时间:2011-10-02 09:22:40

标签: autofac

有没有办法确定Autofac何时完成了实例的初始化? 如果您有Lazy依赖项,或者通过属性注入依赖项,则可能需要它。

可能的解决方案可能如下所示:

public class Component : IKeepMeInformed {
    private readonly IOtherComponent otherComponent;

    public class Component(Lazy<IOtherComponent> otherComponent) {
        this.otherComponent = otherComponent;
    }

    void IKeepMeInformed.InitializationCompleted() {
        // Do whatever you need with this.otherComponent.Value
    }
}

1 个答案:

答案 0 :(得分:1)

不直接绑定到Lazy组件,但Autofac会公开允许您挂接到实例生命周期的事件。通过侦听the OnActivated event,您可以在创建实例后立即执行操作。 E.g:

builder.RegisterType<OtherComponentImplementation>().As<IOtherComponent>()
    .OnActivated(e => InitializationCompleted(e.Instance));

更新:实际上,在Component类的上下文中,您应该“知道”实例初始化的时间。只要您先访问Lazy<>.Value属性,就会出现。