From 080cc42bb1da09059dbc35049a7ded0649961e0c Mon Sep 17 00:00:00 2001 From: HampusM Date: Mon, 29 Aug 2022 20:52:56 +0200 Subject: feat: implement async functionality --- src/di_container.rs | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'src/di_container.rs') diff --git a/src/di_container.rs b/src/di_container.rs index e42175b..b0e5af1 100644 --- a/src/di_container.rs +++ b/src/di_container.rs @@ -1,4 +1,4 @@ -//! Dependency injection container and other related utilities. +//! Dependency injection container. //! //! # Examples //! ``` @@ -53,7 +53,7 @@ use std::any::type_name; use std::marker::PhantomData; #[cfg(feature = "factory")] -use crate::castable_factory::CastableFactory; +use crate::castable_factory::blocking::CastableFactory; use crate::di_container_binding_map::DIContainerBindingMap; use crate::errors::di_container::{ BindingBuilderError, @@ -63,7 +63,12 @@ use crate::errors::di_container::{ }; use crate::interfaces::injectable::Injectable; use crate::libs::intertrait::cast::{CastBox, CastRc}; -use crate::provider::{Providable, SingletonProvider, TransientTypeProvider}; +use crate::provider::blocking::{ + IProvider, + Providable, + SingletonProvider, + TransientTypeProvider, +}; use crate::ptr::{SingletonPtr, SomePtr}; /// When configurator for a binding for type 'Interface' inside a [`DIContainer`]. @@ -256,7 +261,7 @@ where self.di_container.bindings.set::( None, - Box::new(crate::provider::FactoryProvider::new( + Box::new(crate::provider::blocking::FactoryProvider::new( crate::ptr::FactoryPtr::new(factory_impl), )), ); @@ -290,7 +295,7 @@ where self.di_container.bindings.set::( None, - Box::new(crate::provider::FactoryProvider::new( + Box::new(crate::provider::blocking::FactoryProvider::new( crate::ptr::FactoryPtr::new(factory_impl), )), ); @@ -302,7 +307,7 @@ where /// Dependency injection container. pub struct DIContainer { - bindings: DIContainerBindingMap, + bindings: DIContainerBindingMap, } impl DIContainer @@ -416,7 +421,16 @@ impl DIContainer Interface: 'static + ?Sized, { self.bindings - .get::(name)? + .get::(name) + .map_or_else( + || { + Err(DIContainerError::BindingNotFound { + interface: type_name::(), + name, + }) + }, + Ok, + )? .provide(self, dependency_history) .map_err(|err| DIContainerError::BindingResolveFailed { reason: err, @@ -442,7 +456,7 @@ mod tests use super::*; use crate::errors::injectable::InjectableError; - use crate::provider::IProvider; + use crate::provider::blocking::IProvider; use crate::ptr::TransientPtr; mod subjects -- cgit v1.2.3-18-g5258