pub struct DiContainerBuilder { /* private fields */ }Expand description
Mutable builder used only during boot.
Implementations§
Source§impl DiContainerBuilder
impl DiContainerBuilder
pub fn new() -> Self
Sourcepub fn register<T: Send + Sync + 'static>(&mut self, v: T) -> &mut Self
pub fn register<T: Send + Sync + 'static>(&mut self, v: T) -> &mut Self
Register a fully-constructed singleton. Useful for primitives and
configuration values that aren’t #[Injectable].
If an #[Injectable] provider for the same type also exists, freeze
panics — a silent winner would mask which instance the app runs with.
Use register_override to intentionally
replace a descriptor-built provider.
Sourcepub fn register_override<T: Send + Sync + 'static>(&mut self, v: T) -> &mut Self
pub fn register_override<T: Send + Sync + 'static>(&mut self, v: T) -> &mut Self
Register a singleton that replaces any #[Injectable] provider of
the same type. The descriptor is discarded; everything that depends on
T resolves to this instance. Intended for plugins swapping a core
service (e.g. a custom SessionStore) — explicit, not accidental.
Sourcepub fn add_provider(&mut self, d: &'static ProviderDescriptor) -> &mut Self
pub fn add_provider(&mut self, d: &'static ProviderDescriptor) -> &mut Self
Register a provider descriptor (emitted by #[Injectable]).
Sourcepub fn freeze(self) -> Arc<FrozenDiContainer> ⓘ
pub fn freeze(self) -> Arc<FrozenDiContainer> ⓘ
Run topological sort, detect cycles, build providers in dependency
order, then hand back a shared Arc<FrozenDiContainer>.
The container is reference-counted rather than Box::leak-ed: it lives
exactly as long as the running server holds a clone (router state,
request contexts, gateway runtimes, plugin background tasks) and is
dropped when App::launch_on_listener returns — so repeatedly launching
in one process (tests) no longer accumulates leaked containers.
Panics if a direct registration collides with an #[Injectable]
descriptor without an explicit override — previously the descriptor
silently won, which made plugin-side “overrides” no-ops.
Trait Implementations§
Source§impl Default for DiContainerBuilder
impl Default for DiContainerBuilder
Source§fn default() -> DiContainerBuilder
fn default() -> DiContainerBuilder
Auto Trait Implementations§
impl !RefUnwindSafe for DiContainerBuilder
impl !UnwindSafe for DiContainerBuilder
impl Freeze for DiContainerBuilder
impl Send for DiContainerBuilder
impl Sync for DiContainerBuilder
impl Unpin for DiContainerBuilder
impl UnsafeUnpin for DiContainerBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request