Can*_*ell 9 dependency-injection factory-pattern constructor-injection
在听完清洁代码会谈之后,我开始明白我们应该使用工厂来组合对象.因此,例如,如果a House有a Door和a Door有a DoorKnob,则在HouseFactory我们创建new DoorKnob并将其传递给构造函数Door,然后将该新Door对象传递给构造函数House.
但是使用的类House (比如类名ABC)呢?这将取决于HouseFactory,对吗?那么我们传递HouseFactory构造函数ABC吗?我们不是必须以这种方式在构造函数中传递大量工厂吗?
Mar*_*ann 10
继续使用Door和DoorKnob示例,您不注入工厂 - 您注入了DooKnob本身:
public class Door
{
private readonly DoorKnob doorKnob;
public Door(DoorKnob doorKnob)
{
if (doorKnob == null)
throw new ArgumentNullException("doorKnob");
this.doorKnob = doorKnob;
}
}
Run Code Online (Sandbox Code Playgroud)
这个级别没有工厂可见.
另一方面,House取决于Door,但不取决于DoorKnob:
public class House
{
private readonly Door door;
public House(Door door)
{
if (door == null)
throw new ArgumentNullException("door");
this.door = door;
}
}
Run Code Online (Sandbox Code Playgroud)
这使选项保持打开状态,直到最后你必须在应用程序的组合根中组成所有内容:
var house = new House(new Door(new DoorKnob()));
Run Code Online (Sandbox Code Playgroud)
您可以使用DI容器在此级别进行构图,但您不必这样做.没有工厂参与.
| 归档时间: |
|
| 查看次数: |
1251 次 |
| 最近记录: |