-
Автор темы
- #1
Добрый день. Есть библиотека boost di с реализацией инъекции зависимостей. Вот код:
Ссылка на Boost.Di:
Дело в том, что я хочу написать несколько реализаций с одним и тем же интерфейсом и отдать их всех в класс ProtectService в виде вектора поинтеров. Но к сожалению при дебаге, я вижу, ничего туда не передается.
Кажется, я что-то упускаю. Может, кто-нибудь из вас уже сталкивался с такой проблемой и подскажет, как правильно это все настроить? А то голова кругом уже.
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();
}
};
Пожалуйста, авторизуйтесь для просмотра ссылки.
Дело в том, что я хочу написать несколько реализаций с одним и тем же интерфейсом и отдать их всех в класс ProtectService в виде вектора поинтеров. Но к сожалению при дебаге, я вижу, ничего туда не передается.
Кажется, я что-то упускаю. Может, кто-нибудь из вас уже сталкивался с такой проблемой и подскажет, как правильно это все настроить? А то голова кругом уже.