45#ifndef CONTAINER_TRY_HPP_
46#define CONTAINER_TRY_HPP_
85template<
typename... Configs>
100 CreationalConfigsPack,
105 ChainableConfigsPack,
110 explicit constexpr DI(Configs&&... configs)
111 : creational_dispatcher_ { make_dispatcher(
112 meta::Unit<CreationalDispatcherType>{},
118 , chainable_dispatcher_ { make_dispatcher(
119 meta::Unit<ChainableDispatcherType>{},
121 meta::UnaryMetaFunction<IsChainableConfig>{},
130 typename KeyPack = meta::Pack<Type>,
131 typename InputType = std::tuple<>
134 resolve(InputType&& input = std::tuple{})
const
140 .input = std::move(input),
145 return this->creational_dispatcher_
146 .template resolve<Type, KeyPack>(context)
147 .and_then([
this, &context](meta::Reference<Type>
auto entity) {
148 return this->chainable_dispatcher_
149 .template apply_configs_chain<KeyPack, Type>(
157 template<
typename Dispatcher,
typename... Configs_>
158 [[nodiscard]]
static constexpr Dispatcher
160 meta::Unit<Dispatcher>&&,
161 std::tuple<Configs_...>&& configs_tuple
165 [](
auto&&... configs) {
167 std::forward<
decltype(configs)>(configs)...
170 std::move(configs_tuple)
175 CreationalDispatcherType creational_dispatcher_;
176 ChainableDispatcherType chainable_dispatcher_;
Concept and utilities for chainable (decorator/pipeline) configurations.
Concept and utilities for creational (factory/constructor) configurations.
Compile-time type pack utilities and metaprogramming foundations.
Definition ChainableConfigDispatcher.hpp:24
Definition CreationalConfigDispatcher.hpp:31
constexpr DI(Configs &&... configs)
Definition Container.hpp:110
constexpr Resolution< Type, Error > auto resolve(InputType &&input=std::tuple{}) const
Definition Container.hpp:134
Definition Resolution.hpp:30
Definition Decorator.hpp:19
constexpr auto filter_configs(meta::UnaryMetaFunction< Predicate > &&predicates, Configs &... configs) noexcept
Definition ConfigClassifier.hpp:112
Definition ResolutionContext.hpp:17
Definition ResolutionContext.hpp:8