2011-10-02 7 views
0

Autofac이 인스턴스 초기화를 완료했을 때를 확인하는 방법이 있습니까? Lazy 종속성이 있거나 속성을 통해 종속성을 주입하는 경우 필요할 수 있습니다.autofac 인스턴스 초기화 알림

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

직접 게으른 구성 요소에 연결하지,하지만 Autofac는 인스턴스의 수명에 후크 수 이벤트를 노출 :

가능한 해결 방법은 다음과 같이 나타납니다. the OnActivated event을 청취하면 인스턴스를 만든 직후에 물건을 할 수 있습니다. 예컨대 :

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

업데이트 : 인스턴스가 초기화 될 때 실제로, 당신의 Component 클래스의 맥락에서, 당신은 "알고있다"한다. 먼저 Lazy<>.Value 속성에 액세스 할 때마다 표시됩니다.

+0

감사합니다. 나는 그런 메커니즘이 있다는 것을 압니다. 나는 그러한 초기화가 필요한 각 구성 요소의 등록 세부 사항을 변경하는 것을 좋아하지 않습니다. 따라서 인터페이스 기반 솔루션을 원합니다. –

+0

정확한 시나리오는 다음과 같습니다. component (ICommand) 다른 구성 요소 (ViewModel)를 가져 와서 해당 PropertyChanged 이벤트에 가입합니다. 일반적으로 명령은 이벤트가 생성되면 이벤트에 등록해야하며, 일반적으로 생성자에서 수행됩니다. 내 경우에는 어디에 순환 의존성이며 ViewModel을 생성자에서 사용할 수 없습니다. 따라서 Autofac에서 구성 완료 시점을 알려주고 싶습니다. –

+0

그러나 명령 인스턴스의 수명도 ViewModel에 의해 제어되지 않습니까? 예 : VM 생성자에서 생성 되었습니까? 아니면 그 명령이 컨테이너를 통해 어떻게 든 생겨나는 것을 상상하십니까? –