#include "common.h" #include "core/di.h" #include "services/settings/JsonAppSettingsService.h" #include "bgm/AudioStreamPlayer.h" #include "bgm/IBgmService.h" #include "bgm/BgmService.h" #include "App.h" #include "PicoLoaderProcess.h" #include "ProcessFactory.h" namespace di = boost::di; class injected_and_bound : public di::config { public: static auto policies(...) noexcept { using namespace di::policies; using namespace di::policies::operators; return di::make_policies( constructible(is_bound{}) ); } }; static auto diConfig = [] { return di::make_injector( di::bind().to((RandomGenerator&)*gRandomGenerator), di::bind().to(), di::bind().in(di::singleton).to(), di::bind<>().to((const char*)"/_pico/settings.json"), di::bind().in(di::singleton).to() ); }; #define REGISTER_PROCESS(name) template <> std::unique_ptr ProcessFactory::Construct() { return diConfig().create>(); } REGISTER_PROCESS(App); REGISTER_PROCESS(PicoLoaderProcess);