2013-10-08 3 views
0

나는 수업이 같이 있습니다Ninject와 함께 생성자에서 부모 클래스를 사용하는 클래스를 어떻게 바인딩합니까?

public class MyClass 
{ 
    public MyClass() 
    { 
     this.Dependency = new Dependency(this); 
    } 
} 

내가 생성자에 new Dependency() 전화를 이동하려는.

public class MyClass 
{ 
    public MyClass(IDependency dependency) 
    { 
     this.Dependency = dependency; 
    } 
} 

나는 IDependency가 '이'생성자 인수로 생성되도록 바인딩하는 방법을 작동하지 않을 수 있습니다.

Bind<IDependency>() 
    .To<Dependency>() 
    .WithConstructorArgument("myClass", ctx => ctx.???); // How do I do this? 
+0

당신은 전달할 수 없습니다 '이' '이'매개 변수가 생성되는 시점에 존재하지 않기 때문에. 수동 케이스에서는 생성자 자체 내에 생성하기 때문에 '이'가 이미 생성 된 지점에서만 생성됩니다. 일반적으로 이런 종류의 순환 참조는 "코드 냄새"(적어도 종속성이 공용 클래스 인 경우)이므로이를 리팩터링하여 MyClass와 종속성이 둘 다 다른 클래스에 종속되도록 고려할 수 있습니다. 필요한 공유 기능. –

+0

당신은 이것을위한 해결책을 얻었습니까? – Killnine

+0

아닙니다. 저는 기존의 대규모 프로젝트를 리팩토링하고 있으며 한 번에 하나씩 문제를 처리하고 있습니다. 하지만이 방법에 대한 최선의 접근법에 대해서는 아직 명확하지 않습니다. 좀 더 실제적인 예제는'ContactAddress' 의존성을 가진'Contact'이 될 것입니다. (현재 컨 스트럭터에서 인스턴스화됩니다.) 주소는 의존성이 있으므로 해결하려고합니다. 나는'ContactAddress'를 생성자 주입 대신에 속성 주입을 사용하도록 이동할 수 있지만, 여전히 바인딩을 사용하는 것이 확실하지 않습니다. – shamp00

답변

0

귀하의 예가 배치 된 방식으로, 나는 그 등뼈가 있다고 생각합니다. MyClassIDependency에 대한 종속성을 가지고, 그래서 당신은 일을 할 기대 :

Bind<IMyClass>().To<MyClass>().WithConstructorArgument("dependency", new Dependency()); 
+0

순환 참조가 위험하다는 것을 알았습니다. 그러나 기존의'Dependency' 클래스는 생성자에서'MyClass' 매개 변수를 사용합니다. Ninject가 처리하도록하려면 어떻게해야합니까? 저는 이것을 속성으로 옮겨서 속성 주입을 사용할 수 있습니다, 그러나 나는 여전히'this'를 생성자에 주입하는 방법을 보지 못합니다. – shamp00

+0

아, 나는 원래 게시물에서 그걸 잡지 못했다. 아마도'Dependency'의 생성자에서'MyClass' 인수를 제거하고'MyClass' 생성자에서 참조를 속성으로 설정할 수 있을까요? (예 :'dependency.Parent = this;'). 당신의 수업이 꽤 밀접하게 결합 된 것처럼 들리는데, 이것은 가난한 수업 레이아웃을위한 붕대 일뿐입니다. – Killnine

관련 문제