Вопрос Проблема с контейнеризацией зависимостей (boost DI)

Начинающий
Статус
Оффлайн
Регистрация
24 Сен 2024
Сообщения
34
Реакции[?]
6
Поинты[?]
6K
Добрый день. Есть библиотека boost di с реализацией инъекции зависимостей. Вот код:

C++:
int main()
{
    setlocale(0, "ru");

    auto injector = di::make_injector(
        di::bind<IProtect>().to<ProcessProtectService>().in(di::singleton),
        di::bind<ProtectService>().to<ProtectService>().in(di::singleton)
    );

    auto protectService = injector.create<std::shared_ptr<ProtectService>>();

    protectService->AddDetectionHandler([](DetectedTypes detectedType) {
        std::cout << "Ошибка по причине: " << detectedType;

        });

    protectService->StartAllProtects();

    while (true) {
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }


    std::cin.get();
}



/// Вверху регистрация интерфейсов и реализацией в IoC.



class ProtectService {

public:

    using ProtectHandler = std::function<void(DetectedTypes)>;



private:

    std::vector<std::shared_ptr<IProtect>> _allProtects;

    std::vector<ProtectHandler> _handlers;



public:

    ProtectService(std::vector<std::shared_ptr<IProtect>> protects)

        : _allProtects(std::move(protects)) {}



    void AddDetectionHandler(ProtectHandler handler) {

        _handlers.push_back(std::move(handler));

    }



    void StartAllProtects() {

        for (const auto& protect : _allProtects) {

            protect->StartProtect();

        }



        std::thread([this]() {

            while (true) {

                auto it = std::find_if(_allProtects.begin(), _allProtects.end(),

                    [](const auto& protect) {

                        return protect->GetDetectedType() != DetectedTypes::None;

                    });



                if (it != _allProtects.end()) {

                    for (const auto& handler : _handlers) {

                        handler((*it)->GetDetectedType());

                    }

                }



                std::this_thread::sleep_for(std::chrono::milliseconds(100));

            }

            }).detach();

    }

};
Ссылка на Boost.Di:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Дело в том, что я хочу написать несколько реализаций с одним и тем же интерфейсом и отдать их всех в класс ProtectService в виде вектора поинтеров. Но к сожалению при дебаге, я вижу, ничего туда не передается.
Кажется, я что-то упускаю. Может, кто-нибудь из вас уже сталкивался с такой проблемой и подскажет, как правильно это все настроить? А то голова кругом уже.
 
Сверху Снизу