gpt4 book ai didi

dependency-injection - 构造函数注入(inject)——我们也注入(inject)工厂吗?

转载 作者:行者123 更新时间:2023-12-04 03:39:53 27 4
gpt4 key购买 nike

听完Clean Code Talks ,我开始明白我们应该使用工厂来组合对象。因此,例如,如果 House有一个 DoorDoor有一个 DoorKnob , 在 HouseFactory我们创建一个新的DoorKnob并将其传递给 Door 的构造函数,然后传递新的 Door反对 House 的构造函数.

但是使用 House 的类呢? (说类名是 ABC )?这将取决于 HouseFactory , 对?那么我们是否通过 HouseFactoryABC 的构造函数中?这样我们就不必在构造函数中传递大量工厂了吗?

最佳答案

继续使用 Door 和 DoorKnob 示例,您不会注入(inject)工厂 - 您会注入(inject) DooKnob 本身:

public class Door
{
private readonly DoorKnob doorKnob;

public Door(DoorKnob doorKnob)
{
if (doorKnob == null)
throw new ArgumentNullException("doorKnob");

this.doorKnob = doorKnob;
}
}

在这个级别上看不到任何工厂。

另一方面,House 依赖于 Door,但不依赖于 DoorKnob:
public class House
{
private readonly Door door;

public House(Door door)
{
if (door == null)
throw new ArgumentNullException("door");

this.door = door;
}
}

这使选项保持打开状态,直到最后您必须在应用程序的 Composition Root 中编写所有内容。 :
var house = new House(new Door(new DoorKnob()));

您可以使用 DI 容器在此级别进行组合,但您不必这样做。不涉及任何工厂。

关于dependency-injection - 构造函数注入(inject)——我们也注入(inject)工厂吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com