pub struct Container { /* private fields */ }Expand description
Type-indexed dependency container.
Implementations§
Source§impl Container
impl Container
Sourcepub fn request_scope(&self) -> RequestScope<'_>
pub fn request_scope(&self) -> RequestScope<'_>
Creates a request scope for request-lifetime providers.
Sourcepub fn register_singleton<T>(&mut self, value: T) -> Result<(), NidusError>
pub fn register_singleton<T>(&mut self, value: T) -> Result<(), NidusError>
Registers a concrete singleton value.
Sourcepub fn override_singleton<T>(&mut self, value: T) -> Result<(), NidusError>
pub fn override_singleton<T>(&mut self, value: T) -> Result<(), NidusError>
Replaces a singleton provider, intended for explicit test overrides.
Sourcepub fn register_factory<T, F>(
&mut self,
lifetime: ProviderLifetime,
factory: F,
) -> Result<(), NidusError>
pub fn register_factory<T, F>( &mut self, lifetime: ProviderLifetime, factory: F, ) -> Result<(), NidusError>
Registers a provider factory.
Sourcepub fn register_singleton_factory<T, F>(
&mut self,
factory: F,
) -> Result<(), NidusError>
pub fn register_singleton_factory<T, F>( &mut self, factory: F, ) -> Result<(), NidusError>
Registers a singleton provider factory.
Sourcepub fn register_transient<T, F>(&mut self, factory: F) -> Result<(), NidusError>
pub fn register_transient<T, F>(&mut self, factory: F) -> Result<(), NidusError>
Registers a transient provider factory.
Sourcepub fn register_request<T, F>(&mut self, factory: F) -> Result<(), NidusError>
pub fn register_request<T, F>(&mut self, factory: F) -> Result<(), NidusError>
Registers a request-lifetime provider factory.
Sourcepub fn register_request_scoped<T, F>(
&mut self,
factory: F,
) -> Result<(), NidusError>where
T: Send + Sync + 'static,
F: for<'scope> Fn(&RequestScope<'scope>) -> Result<T, NidusError> + Send + Sync + 'static,
pub fn register_request_scoped<T, F>(
&mut self,
factory: F,
) -> Result<(), NidusError>where
T: Send + Sync + 'static,
F: for<'scope> Fn(&RequestScope<'scope>) -> Result<T, NidusError> + Send + Sync + 'static,
Registers a request-lifetime provider factory that resolves dependencies through the active request scope.
Sourcepub fn inject<T>(&self) -> Result<Inject<T>, NidusError>
pub fn inject<T>(&self) -> Result<Inject<T>, NidusError>
Resolves a typed dependency reference.
Sourcepub fn optional<T>(&self) -> Result<Optional<T>, NidusError>
pub fn optional<T>(&self) -> Result<Optional<T>, NidusError>
Resolves an optional typed dependency reference.
Missing providers become Optional::new(None), while registered providers
that fail to construct still return their original error.
Sourcepub fn resolve<T>(&self) -> Result<Arc<T>, NidusError>
pub fn resolve<T>(&self) -> Result<Arc<T>, NidusError>
Resolves a shared typed dependency.
Sourcepub fn eagerly_resolve_singletons(&self) -> Result<(), NidusError>
pub fn eagerly_resolve_singletons(&self) -> Result<(), NidusError>
Eagerly constructs every registered singleton provider and caches it.
Singletons are otherwise constructed lazily on first resolution, which
uses a blocking Condvar wait when two callers race to construct the
same provider. Calling this at startup pre-constructs each singleton so
later resolutions (including from async request handlers) hit the cached
value and never reach that wait, avoiding an async-runtime worker
stalling on first use. Transient and request-lifetime providers are
skipped.
A singleton whose factory errors or panics will do so here, failing startup fast instead of on first request.