Отношение между Композицией Root и Composer - PullRequest
1 голос
/ 01 марта 2020

Я читаю Принципы, практики и схемы внедрения зависимостей и пытаюсь выяснить, в чем на самом деле разница между Композиция Root и Composer.

В книге их определения:

Композиция Root - это единое логическое место в приложении, где модули составляются вместе.

Composer - это объединяющий термин для обозначения любого объекта или метода, который составляет зависимости. Это важная часть композиции Root. Composer часто является DI-контейнером, но это также может быть любой метод, который создает графы объектов вручную (используя Pure DI).

Is Композиция Root больше похоже на название места / места, где мы должны создать наш граф приложений, и Composer это то, что на самом деле это делает? Или это что-то еще?

Если вы используете DI-контейнер, композиция Root должна быть единственным местом, где вы используете DI-контейнер.

Что еще вы могли бы иметь в Композиция Root? Разве это не только DI-контейнер?

public class CompositionRoot
{        
    public static IContainer Compose()
    {
        var builder = new ContainerBuilder();

        builder.RegisterType<Calculator>().As<ICalculator>().SingleInstance();


        return builder.Build();
    }
}

С уважением

1 Ответ

1 голос
/ 01 марта 2020

Композицию Root можно рассматривать как архитектурный Модуль или даже Слой . Он может иметь всю инфраструктуру, необходимую для одновременного приложения ie, которое не относится ни к одному из нижних уровней (например, к уровням представления, домена или доступа к данным). Подумайте о коде, который:

  • читает из очередей сообщений и отправляет сообщения в приложение,
  • декораторы, которые применяют сквозные задачи,
  • реализации адаптера, которые соединяют приложение с внешним миром

Там, где Composition Root может иметь весь этот инфраструктурный код, Composer будет просто состоять из кода, который сообщает все эти фрагменты кода, обеспечивает кэширование в соответствии с их образ жизни, и строит графы объектов из этих созданных компонентов.

...