17template<
typename Type>
36 template<
typename... Dependencies>
39 std::tuple<Dependencies...>& dependencies,
44 if (!this->singleton_value_.has_value())
46 this->singleton_value_.emplace(
47 std::apply(Type::create, dependencies)
50 context.flags.just_created =
true;
56 template<
typename... Dependencies>
59 std::tuple<Dependencies...>& dependencies,
65 this->
do_resolve(meta::Pack<Type>{}, dependencies, context, input).value()
69 template<std::
size_t DependencyIndex>
76 mutable std::optional<Type> singleton_value_ = std::nullopt;
81#ifndef GENERATE_UNIQUE_NAME
82# define GENERATE_UNIQUE_NAME SOME_UNIQUE_NAME
Configuration type enumeration for the dependency injection system.
Compile-time type pack utilities and metaprogramming foundations.
Definition Singleton.hpp:22
Type CentralType
Definition Singleton.hpp:24
std::expected< meta::RuntimeRef< Type >, Error > do_resolve(meta::Pack< Type > keys, std::tuple< Dependencies... > &dependencies, meta::wrapped_with< ResolutionContext > auto &context, const auto &input) const
Definition Singleton.hpp:37
static constexpr ConfigType CONFIG_TYPE
Definition Singleton.hpp:33
std::optional< std::tuple<> > get_dependencies_input() const
Definition Singleton.hpp:70
std::expected< meta::RuntimeRef< const Type >, Error > do_resolve(meta::Pack< const Type > keys, std::tuple< Dependencies... > &dependencies, meta::wrapped_with< ResolutionContext > auto &context, const auto &input) const
Definition Singleton.hpp:57
meta::args_pack_t< decltype(CentralType::create)> DependenciesPack
Definition Singleton.hpp:30
meta::Pack< meta::Pack< Type >, meta::Pack< const Type > > ResolutionKeysPack
Definition Singleton.hpp:25
Definition Decorator.hpp:19
ConfigType
Categorization of configuration strategies in the DI container.
Definition ConfigType.hpp:24
@ CREATIONAL
Creational configs handle object instantiation and factory patterns. These are responsible for creati...
Definition ConfigType.hpp:27
Error
Enumeration of possible errors during dependency injection resolution.
Definition Error.hpp:26
Definition DecoratableConfig.hpp:9