2012-12-01 7 views
2

이제는 Engine을 만들 때 새로운 Compoment이 필요하고 EngineComponent에 'this'를 전달해야합니다.두 개체를 연결하는 종속성 삽입

Component을 만들 때 해당 부모 Engine을 알아야하고 IntegrateComponent() 함수를 호출하여 통합해야합니다.

여기는 순환 참조 상황의 일종입니다. DI에서 어떻게합니까? (내 성 윈저)

public class Engine : IEngine { 
    private IComponent _someComponent; 
    public Engine() { 
    _component = new Component(this); 
    } 
    public void IntegrateComponent() { 
    //init component... 
    } 
} 

public class Component : IComponent { 
    private readonly IEngine _engine; 
    public Component(IEngine engine) { 
    _engine = engine; 
    _engine.IntegrateComponent(); 
    } 
} 

static void Main() { 
    var engine = new Engine(); 
}  

편집 ----------------------------------- -----

내가 원하는 뭔가 같은 ...

Register<IComponent>().ImplementedBy<Component>(); 
Register<IEngine>().ImplementedBy<Engine>(); 
---> Resolve<IEngine>(); ... 

하지만 어떻게 내가 DI이 엔진 & 서로이 구성 요소에 대한 참조를 말할 것입니까? 먼저

+0

어디서 DI가 필요합니까? (당신이하려는 일의 예를 보여줄 수 있습니까?) –

답변

0

, 당신은 속성 주입을 사용하여, 순환 references.If하지가없는 방식으로 설계해야합니다, 당신은이 마크 시만의 우수한 책을 기반으로이

var engine = new Engine(); 
engine.Component = new Component(engine); 

을 깰 수 - 의존성 삽입 (Dependency Injection)을 in .Net.

이미 스레드가 있습니다 : Seemingly circular dependencies causing issues with Castle Windsor

+0

내부 참조를 공개하기 때문에 여기서 속성 주입을 선호하지 않습니다. 귀하의 링크에있는 게시물에서 내 질문에 답변을 드렸 기 때문에 귀하의 답변을 수락합니다. 감사. – Tom