59 std::has_virtual_destructor_v<T>;
76template<
typename TImpl,
typename TInterface>
79 std::is_base_of_v<TInterface, TImpl> &&
80 std::is_default_constructible_v<TImpl>;
97template<
typename F,
typename T>
99 std::convertible_to<std::invoke_result_t<F, di::IServiceContainer&>,
117template<
typename F,
typename T>
119 std::convertible_to<std::invoke_result_t<F>, std::shared_ptr<T>>;
138 { t.create_scope() };
139 { t.registered_services() };
181 std::is_default_constructible_v<T>;
200 requires {
typename std::shared_ptr<T>; };
221 std::is_default_constructible_v<T> &&
222 std::is_copy_constructible_v<T>;
262 typename T::dependencies;
307 { t.dispose() } -> std::same_as<void>;
343 { T::module_name() } -> std::convertible_to<std::string_view>;
344 { registrar.register_services(container) };
Abstract interface for dependency injection containers.
A serializable configuration section type.
A service that requires explicit cleanup.
A service that requires explicit initialization.
A service that can be automatically injected.
A class-based module registrar for ecosystem DI integration.
A type that satisfies service container interface requirements.
A callable that creates service instances.
A type that implements a service interface.
A type that can be used as a service interface.
A type that represents a service scope.
A service that declares its dependencies.
A type that can be shared via shared_ptr.
A callable that creates service instances without container access.
A type that can validate its own state.