pub struct ServiceProvider { /* private fields */ }Implementations§
Source§impl ServiceProvider
impl ServiceProvider
Sourcepub fn register_disposable(&self, cleanup: Box<dyn FnOnce() + Send>)
pub fn register_disposable(&self, cleanup: Box<dyn FnOnce() + Send>)
Register a cleanup closure for a scoped service.
Called by users who want to ensure their scoped services are cleaned up
deterministically when the scope ends. The closure is invoked when
Self::dispose_scoped is called (via Scope::dispose
or Scope Drop).
Sourcepub fn get<T>(&self) -> Result<Arc<T>, RdiError>
pub fn get<T>(&self) -> Result<Arc<T>, RdiError>
Resolve a service by type. Works uniformly for concrete types and trait objects.
Returns Err(RdiError::ServiceNotFound) if not registered.
Sourcepub fn get_optional<T>(&self) -> Option<Arc<T>>
pub fn get_optional<T>(&self) -> Option<Arc<T>>
Resolve a service by type, returning None if not registered.
Sourcepub async fn get_async<T>(&self) -> Result<Arc<T>, RdiError>
pub async fn get_async<T>(&self) -> Result<Arc<T>, RdiError>
Resolve an async service (transient or scoped) by type.
- Singletons are resolved synchronously (already cached during
build_async). - Scoped services are cached in
root_scoped_cache(one instance per scope). - Transient services call the async factory fresh each time.
Sourcepub async fn get_keyed_async<T>(&self, key: &str) -> Result<Arc<T>, RdiError>
pub async fn get_keyed_async<T>(&self, key: &str) -> Result<Arc<T>, RdiError>
Resolve an async keyed service by type and key.
Sourcepub fn get_keyed<T>(&self, key: &str) -> Result<Arc<T>, RdiError>
pub fn get_keyed<T>(&self, key: &str) -> Result<Arc<T>, RdiError>
Resolve a keyed service by type and key.
Returns Err(RdiError::KeyedServiceNotFound) if not found.
Sourcepub fn get_owned<T>(&self) -> Result<T, RdiError>
pub fn get_owned<T>(&self) -> Result<T, RdiError>
Resolve owned T (bypass cache, fresh each call).
Returns Err if not registered or the service is Singleton.
Sourcepub fn try_get_owned<T>(&self) -> Option<T>
pub fn try_get_owned<T>(&self) -> Option<T>
Resolve owned T, returning None if not registered or Singleton.
Sourcepub fn get_keyed_owned<T>(&self, key: &str) -> Result<T, RdiError>
pub fn get_keyed_owned<T>(&self, key: &str) -> Result<T, RdiError>
Resolve owned keyed T.
Returns Err if not found or Singleton.
Sourcepub fn try_get_keyed_owned<T>(&self, key: &str) -> Option<T>
pub fn try_get_keyed_owned<T>(&self, key: &str) -> Option<T>
Resolve owned keyed T, returning None if not found or Singleton.
Sourcepub fn scope(self: &Arc<ServiceProvider>) -> Scope
pub fn scope(self: &Arc<ServiceProvider>) -> Scope
Create a new service scope.
Analogous to IServiceProvider.CreateScope() in MEDI.
Scoped-lifetime services are cached within the returned scope.
Sourcepub fn get_named<T>(&self, name: &str) -> Option<Arc<T>>
pub fn get_named<T>(&self, name: &str) -> Option<Arc<T>>
Cross-DLL safe named service resolution (generic).
Sourcepub fn get_named_any(&self, name: &str) -> Option<Arc<dyn Any + Send + Sync>>
pub fn get_named_any(&self, name: &str) -> Option<Arc<dyn Any + Send + Sync>>
Non-generic named resolution; returns Arc<dyn Any> for trait-object dispatch.
Sourcepub fn register_named<T>(&self, name: &str, service: Arc<T>)
pub fn register_named<T>(&self, name: &str, service: Arc<T>)
Register a named service for cross-DLL plugin access.
Sourcepub fn remove_named(&self, name: &str)
pub fn remove_named(&self, name: &str)
Remove a named service (for plugin unload).
Sourcepub fn rdi_register_named(
&self,
name: &str,
service: Arc<dyn Any + Send + Sync>,
)
pub fn rdi_register_named( &self, name: &str, service: Arc<dyn Any + Send + Sync>, )
Register a named service (for IProvider trait).
Sourcepub fn rdi_remove_named(&self, name: &str)
pub fn rdi_remove_named(&self, name: &str)
Remove a named service (for IProvider trait).
Trait Implementations§
Source§impl IProvider for ServiceProvider
impl IProvider for ServiceProvider
Source§impl IServiceResolver for ServiceProvider
impl IServiceResolver for ServiceProvider
fn get_any(&self, key: &str) -> Option<Arc<dyn Any + Send + Sync>>
fn get_keyed_any( &self, key: &str, variant: &str, ) -> Option<Arc<dyn Any + Send + Sync>>
Source§fn get_keyed_by_type_id(
&self,
tid: TypeId,
key: &str,
) -> Option<Arc<dyn Any + Send + Sync>>
fn get_keyed_by_type_id( &self, tid: TypeId, key: &str, ) -> Option<Arc<dyn Any + Send + Sync>>
None)。Source§fn get_all_any(&self, key: &str) -> Vec<Arc<dyn Any + Send + Sync>>
fn get_all_any(&self, key: &str) -> Vec<Arc<dyn Any + Send + Sync>>
Source§fn get_owned_any(&self, key: &str) -> Option<Arc<dyn Any + Send + Sync>>
fn get_owned_any(&self, key: &str) -> Option<Arc<dyn Any + Send + Sync>>
Arc<dyn Any + Send + Sync> (concrete Arc<Arc<T>>). Read morefn get_keyed_owned_any( &self, key: &str, variant: &str, ) -> Option<Arc<dyn Any + Send + Sync>>
Source§fn provider_arc(&self) -> Option<Arc<ServiceProvider>>
fn provider_arc(&self) -> Option<Arc<ServiceProvider>>
Arc<ServiceProvider> for on-demand service resolution. Read moreSource§fn get<T>(&self) -> Result<Arc<T>, RdiError>
fn get<T>(&self) -> Result<Arc<T>, RdiError>
dyn Trait).
Returns Err(RdiError::ServiceNotFound) if not registered. Read moreSource§fn try_get<T>(&self) -> Option<Arc<T>>
fn try_get<T>(&self) -> Option<Arc<T>>
None if not registered.Source§fn get_keyed<T>(&self, variant: &str) -> Result<Arc<T>, RdiError>
fn get_keyed<T>(&self, variant: &str) -> Result<Arc<T>, RdiError>
Err if not found.Source§fn try_get_keyed<T>(&self, variant: &str) -> Option<Arc<T>>
fn try_get_keyed<T>(&self, variant: &str) -> Option<Arc<T>>
None if not found.Source§fn get_all<T>(&self) -> Vec<Arc<T>>
fn get_all<T>(&self) -> Vec<Arc<T>>
T (default + keyed). Read moreSource§fn get_owned<T>(&self) -> Result<T, RdiError>
fn get_owned<T>(&self) -> Result<T, RdiError>
T (bypass cache, fresh each call).
Returns Err if not registered or the service is Singleton.Source§fn try_get_owned<T>(&self) -> Option<T>
fn try_get_owned<T>(&self) -> Option<T>
T, returning None if not registered or Singleton.