Я прочитал принципы, практики и шаблоны внедрения зависимостей и попытайтесь выяснить, в чем на самом деле разница между Composition Root и Composer.
В книге их определения таковы:
Корень композиции – это единое логическое место в приложении, в котором модули составляются вместе.
Композитор — это объединяющий термин для обозначения любого объекта или метода, который составляет Зависимости. Это важная часть корня композиции. Компоновщик часто является контейнером внедрения зависимостей, но это также может быть любой метод, создающий графы объектов вручную (используя Pure DI).
Composition Root больше похож на название места/локации, где мы должны создать график нашего приложения, а Composer — это то, что на самом деле делает это? Или это что-то другое?
Если вы используете DI-контейнер, Корень композиции должен быть единственным местом, где вы используете DI-контейнер.
Что еще вы могли бы иметь в Composition Root? Разве это не только контейнер DI?
public class CompositionRoot
{
public static IContainer Compose()
{
var builder = new ContainerBuilder();
builder.RegisterType<Calculator>().As<ICalculator>().SingleInstance();
return builder.Build();
}
}
С Уважением
Compose
в вашем примере не является компоновщиком. В вашем случае методCompose
является частью корня композиции, который создает композитор. В вашем примереIContainer
(построенныйContainerBuilder
) является Composer. 02.03.2020