我正在阅读他的书" 网上依赖注入".
1)他在这里说Bastard Injection
只有在我们使用时才会发生Foreign Default
.
但在他的书中,第148页上的插图显示,Bastard Injection
当依赖项的默认实现是Foreign Default
或者Local Default
:
那么当依赖的默认实现是一个时,Bastard Injection反模式也会出现Local Default
吗?
2)在这里(以及他的书中)他指出,如果一个类有一个可选的依赖,那么这个依赖的默认实现是好的Local Default
:
但在下一篇文章中,他似乎反对拥有可选的依赖项,即使默认实现是Local Default
:
private readonly ILog log; public MyConsumer(ILog log) { this.log = log ??LogManager.GetLogger("My"); }就封装而言,这种方法的主要问题在于,看起来MyConsumer类无论是否控制其日志依赖的创建都无法真正决定.虽然这是一个简化的示例,但如果LogManager返回的ILog实例包装了一个非托管资源,这可能会成为问题,该资源应该在不再需要时处理掉.
当依赖的默认实现是本地的时,他在上面的摘录中的参数是否也有效?如果是这样,那么还应该避免使用具有本地默认值的可选依赖项?
3)Pg.147:
Bastard Injection的主要问题是它使用了FOREIGN DEFAULT ...,我们不能再自由地重用该类了,因为它拖拽了我们可能不想要的依赖.进行并行开发也变得更加困难,因为类很大程度上依赖于它的依赖性.
Foreign Default是一个依赖项的实现,它被用作默认值,并在与其使用者不同的程序集中定义.因此,对于Foreign Default,使用者的程序集也会依赖于依赖项的程序集.
他是否也暗示Foreign Default使并行开发更加困难,而Local Default则不然?如果他是,那么这没有意义,因为我认为使并行开发变得困难的原因并不是消费者的集合很难引用依赖的汇编,而是消费者阶层依赖于一个具体实现的事实.依赖?
谢谢