Что такое Autowiring в DI-контейнерах?

Начал изучать устройство DI-контейнеров в общем и в частности для C++. Пересмотрев некоторое количество реализаций, выбрал для себя Hypodermic. В целом, по Unit-тестам разобрался как с работать с библиотекой, вот только не совсем понял про Autowiring. Что это такое?
P.S. Прилагаю текст двух Unit-тестов с рассматриваемой проблемой.
BOOST_AUTO_TEST_CASE(autowired_registration_follows_the_usual_registration_rules)
{
    // Arrange
    ContainerBuilder c;

    // Act
    c.autowireType< ServiceA >().as< IServiceA >();
    c.autowireType< ServiceB >().singleInstance();

    // Assert
    auto container = c.build();

    auto serviceB = container->resolve< ServiceB >();
    auto nullServiceB = container->resolve< IServiceB >();

    BOOST_CHECK(serviceB != nullptr);
    BOOST_CHECK(nullServiceB == nullptr);
    BOOST_CHECK(serviceB == container->resolve< ServiceB >());
}

BOOST_AUTO_TEST_CASE(autowired_registration_can_resolve_all_services)
{
    // Arrange
    ContainerBuilder c;
    c.autowireType< ServiceA >().as< IServiceA >().as< IRunWithScissors >();

    c.autowireType< ServiceB >().as< IServiceB >();
    c.autowireType< ServiceRunningWithScissors >().as< IServiceB >();

    c.autowireType< ServiceBController >();

    auto container = c.build();

    // Act
    auto serviceBController = container->resolve< ServiceBController >();

    // Assert
    BOOST_CHECK(serviceBController != nullptr);
}
  • Вопрос задан
  • 779 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Autowiring - автосвязывание. То есть контейнер сам на основе типов пытается догадаться от кого кто зависит. Не нужно прописывать явно все зависимости.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы