diff options
Diffstat (limited to 'src/di_container/blocking')
-rw-r--r-- | src/di_container/blocking/mod.rs | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/di_container/blocking/mod.rs b/src/di_container/blocking/mod.rs index d9efe94..7286f48 100644 --- a/src/di_container/blocking/mod.rs +++ b/src/di_container/blocking/mod.rs @@ -55,8 +55,6 @@ use crate::di_container::binding_storage::DIContainerBindingStorage; use crate::di_container::blocking::binding::builder::BindingBuilder; use crate::di_container::BindingOptions; use crate::errors::di_container::DIContainerError; -use crate::private::cast::boxed::CastBox; -use crate::private::cast::rc::CastRc; use crate::provider::blocking::{IProvider, Providable}; use crate::ptr::SomePtr; use crate::util::use_double; @@ -267,22 +265,28 @@ impl DIContainer .get_binding_providable::<Interface>(binding_options, dependency_history)?; match binding_providable { - Providable::Transient(transient_binding) => Ok(SomePtr::Transient( - transient_binding.cast::<Interface>().map_err(|_| { - DIContainerError::CastFailed { + Providable::Transient(transient_binding) => { + let ptr_buf = transient_binding.into_ptr_buffer_box(); + + ptr_buf + .cast_into_boxed::<Interface>() + .ok_or_else(|| DIContainerError::CastFailed { interface: type_name::<Interface>(), binding_kind: "transient", - } - })?, - )), - Providable::Singleton(singleton_binding) => Ok(SomePtr::Singleton( - singleton_binding.cast::<Interface>().map_err(|_| { - DIContainerError::CastFailed { + }) + .map(SomePtr::Transient) + } + Providable::Singleton(singleton_binding) => { + let ptr_buf = singleton_binding.into_ptr_buffer_rc(); + + ptr_buf + .cast_into_rc::<Interface>() + .ok_or_else(|| DIContainerError::CastFailed { interface: type_name::<Interface>(), binding_kind: "singleton", - } - })?, - )), + }) + .map(SomePtr::Singleton) + } #[cfg(feature = "factory")] Providable::Factory(factory_binding) => { use crate::castable_factory::CastableFactory; |