Начал изучать устройство 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);
}