构造函数注入——我们也注入工厂吗?

2024-02-26

听完后整洁代码讲座 https://www.youtube.com/playlist?list=PL693EFD059797C21E,我开始明白我们应该使用工厂来组合对象。因此,举例来说,如果House has a Door and a Door has a DoorKnob, in HouseFactory我们创建一个新的DoorKnob并将其传递给构造函数Door,然后传递新的Door对象的构造函数House.

但是使用的类呢?House (假设班级名称是ABC)?这将取决于HouseFactory, 正确的?那么我们是否通过HouseFactory在构造函数中ABC?我们是否必须以这种方式在构造函数中传递大量工厂?


继续使用 Door 和 DoorKnob 示例,您不注入工厂 - 您注入 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;
    }
}

这使得选项保持开放,直到最后你have组成应用程序中的所有内容成分根 http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx:

var house = new House(new Door(new DoorKnob()));

您可以使用 DI 容器在此级别进行组合,但并非必须这样做。没有工厂参与其中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构造函数注入——我们也注入工厂吗? 的相关文章

随机推荐