2017-01-26 156 views
0

比方說,我有以下類別:與參數解析依賴

class A 
{ 
    // reference to B 
    private B _b; 

    // constructor for A 
    public A(B b) 
    { 
     _b = b; 
    } 
} 

class B 
{ 
    private A _a; 

    // constructor for B 
    public B() 
    { 
     // initialize A and give it a reference on self 
     a = new A(this); 
    } 
} 

如何更換一個手動初始化,依賴注入,考慮相應的接口IA一個工具,我必須在相應的綁定我ninject配置:

.Bind<IA>().To<A>().InTransientScope(); 

任何解決方法是歡迎的。
PS這是一個WPF應用程序。

+0

IB綁定到B - 這取決於您使用的IOC。 –

+0

並將A的構造函數編輯爲公共A(IB b)而不是B –

+3

您應該通過將共享邏輯從B或A中提取到新類C中來打破循環依賴關係。將A注入到A和B中。 – Steven

回答

2

您需要重構你的代碼,以

class A { 
    private B _b; 
    public A(B b) { 
    _b = b; 
    } 
} 
class B { 
    private A _a; 
    public B(A a) { 
    _a = a; 
    } 
} 

然而,這將創建一個循環引用,你的容器可能會拋出異常這一點。

要解決此問題,您綁定到IA A.它應該會自動解決之前需要重構你的代碼

class A { 
    private C _c; 
    public A(C c) { 
    _c = c; 
    } 
} 
class B { 
    private A _a; 
    private C _c; 
    public B(A a, C c) { 
    _a = a; 
    _c = c; 
    } 
} 
class C { 
    public C() { 
    } 
} 

參見Circular Dependency in constructors and Dependency Injection如何重構你的類到C