Следуя примеру с дверью и дверной ручкой, вы не вводите фабрику - вы вводите саму ручку DooKnob:
public class Door
{
private readonly DoorKnob doorKnob;
public Door(DoorKnob doorKnob)
{
if (doorKnob == null)
throw new ArgumentNullException("doorKnob");
this.doorKnob = doorKnob;
}
}
На этом уровне не видно ни одной фабрики.
Домс другой стороны, зависит от Door, но не от DoorKnob:
public class House
{
private readonly Door door;
public House(Door door)
{
if (door == null)
throw new ArgumentNullException("door");
this.door = door;
}
}
Это оставляет опции открытыми до тех пор, пока, наконец, у вас не будет для составления всего в корне Composition приложения:
var house = new House(new Door(new DoorKnob()));
Вы можете использовать DI-контейнер для создания композиций на этом уровне, но это не обязательно.Фабрики не задействованы.