// // Copyright (c) 2012-2020 Kris Jusiak (kris at jusiak dot net) // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // //<- #include #include //-> #include namespace di = boost::di; //<- enum eid { e1 = 1, e2 = 2 }; struct interface { virtual ~interface() noexcept = default; }; struct implementation1 : interface {}; struct implementation2 : interface {}; //-> /*<>*/ auto dynamic_bindings = [](eid& id) { return di::make_injector( /*<>*/ di::bind().to([&](const auto& injector) -> std::shared_ptr { switch (id) { default: return nullptr; case e1: return injector.template create>(); case e2: return injector.template create>(); } return nullptr; })); }; int main() { auto id = e1; /*<>*/ auto injector = di::make_injector(dynamic_bindings(id)); assert(dynamic_cast(injector.create>().get())); id = e2; /*<>*/ assert(dynamic_cast(injector.create>().get())); (void)id; }