tan*_*ius 10 refactoring dependency-injection inversion-of-control
例:
class MyClass
{
Composition m_Composition;
void MyClass()
{
m_Composition = new Composition( this );
}
}
Run Code Online (Sandbox Code Playgroud)
我有兴趣在这里使用depenency-injection.所以我将不得不重构构造函数,如:
void MyClass( Composition composition )
{
m_Composition = composition;
}
Run Code Online (Sandbox Code Playgroud)
但是我现在遇到了一个问题,因为Composition-object依赖于MyClass刚创建的类型的对象.
依赖容器可以解决这个问题吗?应该这样做吗?
或者从一开始就是糟糕的设计?
Mar*_*ann 12
不,DI容器不会解决循环依赖 - 实际上,它会在您尝试解析依赖关系时抛出异常来抗议它.
在许多DI容器中,您可以提供高级配置,使您可以克服此问题,但它们本身无法解决循环依赖关系.他们怎么样?
根据经验,循环依赖是一种设计气味.如果可以的话,考虑一种替代设计,你可以摆脱循环依赖 - 这也会减少耦合.一些可能的重新设计方案:
不过,我刻意的选择了字闻过反模式,因为有其他的情况(特别是当你处理外部定义的API),其中无法避免循环依赖.
在这种情况下,您需要稍微决定放松依赖项创建的位置.一旦你知道这一点,注入一个抽象工厂可能有助于推迟其中一个创建,直到创建了圆的其他部分.
这对方的回答是最好的,可用的例子中我目前知道的,但如果我可以大胆,我即将出版的新书也将包含解决这个问题很一节.
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |