diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/di_container/binding_storage.rs | 10 | ||||
| -rw-r--r-- | src/di_container/blocking/binding/builder.rs | 49 | ||||
| -rw-r--r-- | src/di_container/blocking/binding/scope_configurator.rs | 25 | ||||
| -rw-r--r-- | src/di_container/blocking/binding/when_configurator.rs | 13 | ||||
| -rw-r--r-- | src/di_container/blocking/mod.rs | 63 | ||||
| -rw-r--r-- | src/interfaces/injectable.rs | 3 | ||||
| -rw-r--r-- | src/private/castable_factory/blocking.rs | 23 | ||||
| -rw-r--r-- | src/private/factory.rs | 4 | ||||
| -rw-r--r-- | src/provider/blocking.rs | 15 | ||||
| -rw-r--r-- | src/test_utils.rs | 5 | 
10 files changed, 104 insertions, 106 deletions
diff --git a/src/di_container/binding_storage.rs b/src/di_container/binding_storage.rs index 2451791..b3fea6f 100644 --- a/src/di_container/binding_storage.rs +++ b/src/di_container/binding_storage.rs @@ -63,6 +63,16 @@ where      }  } +impl<Provider> Default for DIContainerBindingStorage<Provider> +where +    Provider: 'static + ?Sized, +{ +    fn default() -> Self +    { +        Self::new() +    } +} +  #[derive(Debug, PartialEq, Eq, Hash)]  struct BindingId<'opts>  { diff --git a/src/di_container/blocking/binding/builder.rs b/src/di_container/blocking/binding/builder.rs index 64e787e..8eebcc0 100644 --- a/src/di_container/blocking/binding/builder.rs +++ b/src/di_container/blocking/binding/builder.rs @@ -1,7 +1,6 @@  //! Binding builder for types inside of a [`DIContainer`].  use std::any::type_name;  use std::marker::PhantomData; -use std::rc::Rc;  use crate::di_container::blocking::binding::scope_configurator::BindingScopeConfigurator;  #[cfg(feature = "factory")] @@ -16,22 +15,22 @@ use_double!(crate::di_container::blocking::DIContainer);  /// Binding builder for type `Interface` inside a [`DIContainer`].  #[must_use = "No binding will be created if you don't use the binding builder"] -pub struct BindingBuilder<Interface> +pub struct BindingBuilder<'di_container, Interface>  where      Interface: 'static + ?Sized,  { -    di_container: Rc<DIContainer>, +    di_container: &'di_container DIContainer,      dependency_history_factory: fn() -> DependencyHistory,      interface_phantom: PhantomData<Interface>,  } -impl<Interface> BindingBuilder<Interface> +impl<'di_container, Interface> BindingBuilder<'di_container, Interface>  where      Interface: 'static + ?Sized,  {      pub(crate) fn new( -        di_container: Rc<DIContainer>, +        di_container: &'di_container DIContainer,          dependency_history_factory: fn() -> DependencyHistory,      ) -> Self      { @@ -83,7 +82,10 @@ where      /// ```      pub fn to<Implementation>(          self, -    ) -> Result<BindingScopeConfigurator<Interface, Implementation>, BindingBuilderError> +    ) -> Result< +        BindingScopeConfigurator<'di_container, Interface, Implementation>, +        BindingBuilderError, +    >      where          Implementation: Injectable<DIContainer>,      { @@ -97,7 +99,7 @@ where          }          let binding_scope_configurator = BindingScopeConfigurator::new( -            self.di_container.clone(), +            self.di_container,              self.dependency_history_factory,          ); @@ -151,13 +153,13 @@ where      /// di_container      ///     .bind::<ICustomerFactory>()      ///     .to_factory(&|context| { -    ///         Box::new(move |name, id| { -    ///             let customer_id_factory = context -    ///                 .get::<ICustomerIDFactory>() -    ///                 .unwrap() -    ///                 .factory() -    ///                 .unwrap(); +    ///         let customer_id_factory = context +    ///             .get::<ICustomerIDFactory>() +    ///             .unwrap() +    ///             .factory() +    ///             .unwrap();      /// +    ///         Box::new(move |name, id| {      ///             let customer_id = customer_id_factory(id);      ///      ///             let customer = TransientPtr::new(Customer::new(name, customer_id)); @@ -174,12 +176,12 @@ where      pub fn to_factory<Args, Return, Func>(          self,          factory_func: &'static Func, -    ) -> Result<BindingWhenConfigurator<Interface>, BindingBuilderError> +    ) -> Result<BindingWhenConfigurator<'di_container, Interface>, BindingBuilderError>      where          Args: std::marker::Tuple + 'static,          Return: 'static + ?Sized,          Interface: Fn<Args, Output = crate::ptr::TransientPtr<Return>>, -        Func: Fn<(std::rc::Rc<DIContainer>,), Output = Box<Interface>>, +        Func: Fn(&DIContainer) -> Box<Interface>,      {          use crate::private::castable_factory::blocking::CastableFactory; @@ -260,14 +262,13 @@ where      pub fn to_default_factory<Return, FactoryFunc>(          self,          factory_func: &'static FactoryFunc, -    ) -> Result<BindingWhenConfigurator<Interface>, BindingBuilderError> +    ) -> Result<BindingWhenConfigurator<'di_container, Interface>, BindingBuilderError>      where          Return: 'static + ?Sized, -        FactoryFunc: Fn< -            (Rc<DIContainer>,), -            Output = crate::ptr::TransientPtr< -                dyn Fn<(), Output = crate::ptr::TransientPtr<Return>>, -            >, +        FactoryFunc: Fn( +            &DIContainer, +        ) -> crate::ptr::TransientPtr< +            dyn Fn<(), Output = crate::ptr::TransientPtr<Return>>,          >,      {          use crate::private::castable_factory::blocking::CastableFactory; @@ -325,7 +326,7 @@ mod tests              .once();          let binding_builder = BindingBuilder::<dyn subjects::INumber>::new( -            Rc::new(mock_di_container), +            &mock_di_container,              MockDependencyHistory::new,          ); @@ -361,7 +362,7 @@ mod tests              .once();          let binding_builder = BindingBuilder::<IUserManagerFactory>::new( -            Rc::new(mock_di_container), +            &mock_di_container,              MockDependencyHistory::new,          ); @@ -403,7 +404,7 @@ mod tests              .once();          let binding_builder = BindingBuilder::<dyn subjects::IUserManager>::new( -            Rc::new(mock_di_container), +            &mock_di_container,              MockDependencyHistory::new,          ); diff --git a/src/di_container/blocking/binding/scope_configurator.rs b/src/di_container/blocking/binding/scope_configurator.rs index be469ba..3d939ba 100644 --- a/src/di_container/blocking/binding/scope_configurator.rs +++ b/src/di_container/blocking/binding/scope_configurator.rs @@ -1,6 +1,5 @@  //! Scope configurator for a binding for types inside of a [`DIContainer`].  use std::marker::PhantomData; -use std::rc::Rc;  use crate::di_container::blocking::binding::when_configurator::BindingWhenConfigurator;  use crate::di_container::BindingOptions; @@ -14,25 +13,26 @@ use_double!(crate::dependency_history::DependencyHistory);  use_double!(crate::di_container::blocking::DIContainer);  /// Scope configurator for a binding for type `Interface` inside a [`DIContainer`]. -pub struct BindingScopeConfigurator<Interface, Implementation> +pub struct BindingScopeConfigurator<'di_container, Interface, Implementation>  where      Interface: 'static + ?Sized,      Implementation: Injectable<DIContainer>,  { -    di_container: Rc<DIContainer>, +    di_container: &'di_container DIContainer,      dependency_history_factory: fn() -> DependencyHistory,      interface_phantom: PhantomData<Interface>,      implementation_phantom: PhantomData<Implementation>,  } -impl<Interface, Implementation> BindingScopeConfigurator<Interface, Implementation> +impl<'di_container, Interface, Implementation> +    BindingScopeConfigurator<'di_container, Interface, Implementation>  where      Interface: 'static + ?Sized,      Implementation: Injectable<DIContainer>,  {      pub(crate) fn new( -        di_container: Rc<DIContainer>, +        di_container: &'di_container DIContainer,          dependency_history_factory: fn() -> DependencyHistory,      ) -> Self      { @@ -48,7 +48,7 @@ where      ///      /// This is the default.      #[allow(clippy::must_use_candidate)] -    pub fn in_transient_scope(self) -> BindingWhenConfigurator<Interface> +    pub fn in_transient_scope(self) -> BindingWhenConfigurator<'di_container, Interface>      {          self.set_in_transient_scope(); @@ -61,11 +61,14 @@ where      /// Will return Err if resolving the implementation fails.      pub fn in_singleton_scope(          self, -    ) -> Result<BindingWhenConfigurator<Interface>, BindingScopeConfiguratorError> +    ) -> Result< +        BindingWhenConfigurator<'di_container, Interface>, +        BindingScopeConfiguratorError, +    >      {          let singleton: SingletonPtr<Implementation> = SingletonPtr::from(              Implementation::resolve( -                &self.di_container, +                self.di_container,                  (self.dependency_history_factory)(),              )              .map_err(BindingScopeConfiguratorError::SingletonResolveFailed)?, @@ -111,8 +114,7 @@ mod tests              dyn subjects::IUserManager,              subjects::UserManager,          >::new( -            Rc::new(di_container_mock), -            MockDependencyHistory::new, +            &di_container_mock, MockDependencyHistory::new          );          binding_scope_configurator.in_transient_scope(); @@ -133,8 +135,7 @@ mod tests              dyn subjects::IUserManager,              subjects::UserManager,          >::new( -            Rc::new(di_container_mock), -            MockDependencyHistory::new, +            &di_container_mock, MockDependencyHistory::new          );          assert!(binding_scope_configurator.in_singleton_scope().is_ok()); diff --git a/src/di_container/blocking/binding/when_configurator.rs b/src/di_container/blocking/binding/when_configurator.rs index 3d267b2..2a1af2c 100644 --- a/src/di_container/blocking/binding/when_configurator.rs +++ b/src/di_container/blocking/binding/when_configurator.rs @@ -1,7 +1,6 @@  //! When configurator for a binding for types inside of a [`DIContainer`].  use std::any::type_name;  use std::marker::PhantomData; -use std::rc::Rc;  use crate::di_container::BindingOptions;  use crate::errors::di_container::BindingWhenConfiguratorError; @@ -10,20 +9,20 @@ use crate::util::use_double;  use_double!(crate::di_container::blocking::DIContainer);  /// When configurator for a binding for type `Interface` inside a [`DIContainer`]. -pub struct BindingWhenConfigurator<Interface> +pub struct BindingWhenConfigurator<'di_container, Interface>  where      Interface: 'static + ?Sized,  { -    di_container: Rc<DIContainer>, +    di_container: &'di_container DIContainer,      interface_phantom: PhantomData<Interface>,  } -impl<Interface> BindingWhenConfigurator<Interface> +impl<'di_container, Interface> BindingWhenConfigurator<'di_container, Interface>  where      Interface: 'static + ?Sized,  { -    pub(crate) fn new(di_container: Rc<DIContainer>) -> Self +    pub(crate) fn new(di_container: &'di_container DIContainer) -> Self      {          Self {              di_container, @@ -88,9 +87,7 @@ mod tests              .once();          let binding_when_configurator = -            BindingWhenConfigurator::<dyn subjects::INumber>::new(Rc::new( -                di_container_mock, -            )); +            BindingWhenConfigurator::<dyn subjects::INumber>::new(&di_container_mock);          assert!(binding_when_configurator.when_named("cool").is_ok());      } diff --git a/src/di_container/blocking/mod.rs b/src/di_container/blocking/mod.rs index 09e7db1..a38b5da 100644 --- a/src/di_container/blocking/mod.rs +++ b/src/di_container/blocking/mod.rs @@ -51,7 +51,6 @@  //! ```  use std::any::type_name;  use std::cell::RefCell; -use std::rc::Rc;  use crate::di_container::binding_storage::DIContainerBindingStorage;  use crate::di_container::blocking::binding::builder::BindingBuilder; @@ -74,6 +73,7 @@ pub(crate) type BindingOptionsWithLt<'a> = BindingOptions<'a>;  pub(crate) type BindingOptionsWithLt = BindingOptions<'static>;  /// Blocking dependency injection container. +#[derive(Default)]  pub struct DIContainer  {      binding_storage: RefCell<DIContainerBindingStorage<dyn IProvider<Self>>>, @@ -83,11 +83,11 @@ impl DIContainer  {      /// Returns a new `DIContainer`.      #[must_use] -    pub fn new() -> Rc<Self> +    pub fn new() -> Self      { -        Rc::new(Self { +        Self {              binding_storage: RefCell::new(DIContainerBindingStorage::new()), -        }) +        }      }  } @@ -96,7 +96,7 @@ impl DIContainer  {      /// Returns a new [`BindingBuilder`] for the given interface.      #[allow(clippy::missing_panics_doc)] -    pub fn bind<Interface>(self: &mut Rc<Self>) -> BindingBuilder<Interface> +    pub fn bind<Interface>(&mut self) -> BindingBuilder<'_, Interface>      where          Interface: 'static + ?Sized,      { @@ -104,7 +104,7 @@ impl DIContainer          panic!("Nope");          #[cfg(not(test))] -        BindingBuilder::new(self.clone(), DependencyHistory::new) +        BindingBuilder::new(self, DependencyHistory::new)      }      /// Returns the type bound with `Interface`. @@ -114,7 +114,7 @@ impl DIContainer      /// - No binding for `Interface` exists      /// - Resolving the binding for `Interface` fails      /// - Casting the binding for `Interface` fails -    pub fn get<Interface>(self: &Rc<Self>) -> Result<SomePtr<Interface>, DIContainerError> +    pub fn get<Interface>(&self) -> Result<SomePtr<Interface>, DIContainerError>      where          Interface: 'static + ?Sized,      { @@ -129,7 +129,7 @@ impl DIContainer      /// - Resolving the binding for `Interface` fails      /// - Casting the binding for `Interface` fails      pub fn get_named<Interface>( -        self: &Rc<Self>, +        &self,          name: &'static str,      ) -> Result<SomePtr<Interface>, DIContainerError>      where @@ -177,7 +177,7 @@ impl DIContainer      /// # }      /// ```      pub fn get_bound<Interface>( -        self: &Rc<Self>, +        &self,          dependency_history: DependencyHistory,          binding_options: BindingOptionsWithLt,      ) -> Result<SomePtr<Interface>, DIContainerError> @@ -215,7 +215,7 @@ impl DIContainer                          binding_kind: "factory",                      })?; -                Ok(SomePtr::Factory(factory.call(self.clone()).into())) +                Ok(SomePtr::Factory(factory.call(self).into()))              }              #[cfg(feature = "factory")]              Providable::DefaultFactory(factory_binding) => { @@ -234,15 +234,12 @@ impl DIContainer                          binding_kind: "default factory",                      })?; -                Ok(SomePtr::Transient(default_factory.call(self.clone())())) +                Ok(SomePtr::Transient(default_factory.call(self)()))              }          }      } -    fn has_binding<Interface>( -        self: &Rc<Self>, -        binding_options: BindingOptionsWithLt, -    ) -> bool +    fn has_binding<Interface>(&self, binding_options: BindingOptionsWithLt) -> bool      where          Interface: ?Sized + 'static,      { @@ -252,7 +249,7 @@ impl DIContainer      }      fn set_binding<Interface>( -        self: &Rc<Self>, +        &self,          binding_options: BindingOptions<'static>,          provider: Box<dyn IProvider<Self>>,      ) where @@ -264,7 +261,7 @@ impl DIContainer      }      fn remove_binding<Interface>( -        self: &Rc<Self>, +        &self,          binding_options: BindingOptions<'static>,      ) -> Option<Box<dyn IProvider<Self>>>      where @@ -279,7 +276,7 @@ impl DIContainer  impl DIContainer  {      fn get_binding_providable<Interface>( -        self: &Rc<Self>, +        &self,          binding_options: BindingOptionsWithLt,          dependency_history: DependencyHistory,      ) -> Result<Providable<Self>, DIContainerError> @@ -494,15 +491,14 @@ mod tests          let di_container = DIContainer::new(); -        let factory_func: &dyn Fn(Rc<DIContainer>) -> Box<IUserManagerFactory> = -            &|_: Rc<DIContainer>| { -                Box::new(move |users| { -                    let user_manager: TransientPtr<dyn IUserManager> = -                        TransientPtr::new(UserManager::new(users)); +        let factory_func: &dyn Fn(&DIContainer) -> Box<IUserManagerFactory> = &|_| { +            Box::new(move |users| { +                let user_manager: TransientPtr<dyn IUserManager> = +                    TransientPtr::new(UserManager::new(users)); -                    user_manager -                }) -            }; +                user_manager +            }) +        };          let mut mock_provider = MockIProvider::new(); @@ -572,15 +568,14 @@ mod tests          let di_container = DIContainer::new(); -        let factory_func: &dyn Fn(Rc<DIContainer>) -> Box<IUserManagerFactory> = -            &|_: Rc<DIContainer>| { -                Box::new(move |users| { -                    let user_manager: TransientPtr<dyn IUserManager> = -                        TransientPtr::new(UserManager::new(users)); +        let factory_func: &dyn Fn(&DIContainer) -> Box<IUserManagerFactory> = &|_| { +            Box::new(move |users| { +                let user_manager: TransientPtr<dyn IUserManager> = +                    TransientPtr::new(UserManager::new(users)); -                    user_manager -                }) -            }; +                user_manager +            }) +        };          let mut mock_provider = MockIProvider::new(); diff --git a/src/interfaces/injectable.rs b/src/interfaces/injectable.rs index 458b167..d82f042 100644 --- a/src/interfaces/injectable.rs +++ b/src/interfaces/injectable.rs @@ -1,6 +1,5 @@  //! Interface for structs that can be injected into or be injected to.  use std::fmt::Debug; -use std::rc::Rc;  use crate::errors::injectable::InjectableError;  use crate::private::cast::CastFrom; @@ -17,7 +16,7 @@ pub trait Injectable<DIContainerT>: CastFrom      /// # Errors      /// Will return `Err` if resolving the dependencies fails.      fn resolve( -        di_container: &Rc<DIContainerT>, +        di_container: &DIContainerT,          dependency_history: DependencyHistory,      ) -> Result<TransientPtr<Self>, InjectableError>      where diff --git a/src/private/castable_factory/blocking.rs b/src/private/castable_factory/blocking.rs index 0761b7e..a28ce71 100644 --- a/src/private/castable_factory/blocking.rs +++ b/src/private/castable_factory/blocking.rs @@ -1,6 +1,5 @@  use std::any::type_name;  use std::fmt::Debug; -use std::rc::Rc;  use crate::private::any_factory::AnyFactory;  use crate::private::factory::IFactory; @@ -11,7 +10,7 @@ where      ReturnInterface: 'static + ?Sized,      DIContainerT: 'static,  { -    func: &'static dyn Fn<(Rc<DIContainerT>,), Output = TransientPtr<ReturnInterface>>, +    func: &'static dyn Fn(&DIContainerT) -> TransientPtr<ReturnInterface>,  }  impl<ReturnInterface, DIContainerT> CastableFactory<ReturnInterface, DIContainerT> @@ -19,10 +18,7 @@ where      ReturnInterface: 'static + ?Sized,  {      pub fn new( -        func: &'static dyn Fn< -            (Rc<DIContainerT>,), -            Output = TransientPtr<ReturnInterface>, -        >, +        func: &'static dyn Fn(&DIContainerT) -> TransientPtr<ReturnInterface>,      ) -> Self      {          Self { func } @@ -34,7 +30,7 @@ impl<ReturnInterface, DIContainerT> IFactory<ReturnInterface, DIContainerT>  where      ReturnInterface: 'static + ?Sized,  { -    fn call(&self, di_container: Rc<DIContainerT>) -> TransientPtr<ReturnInterface> +    fn call(&self, di_container: &DIContainerT) -> TransientPtr<ReturnInterface>      {          (self.func)(di_container)      } @@ -58,7 +54,9 @@ where      {          let ret = type_name::<TransientPtr<ReturnInterface>>(); -        formatter.write_fmt(format_args!("CastableFactory (Rc<DIContainer>) -> {ret}")) +        formatter.write_fmt(format_args!( +            "CastableFactory (&DIContainer) -> {ret} {{ ... }}" +        ))      }  } @@ -77,12 +75,13 @@ mod tests      #[test]      fn can_call()      { -        let castable_factory = -            CastableFactory::new(&|_| TransientPtr::new(Bacon { heal_amount: 27 })); +        let castable_factory = CastableFactory::new(&|_: &MockDIContainer| { +            TransientPtr::new(Bacon { heal_amount: 27 }) +        }); -        let mock_di_container = Rc::new(MockDIContainer::new()); +        let mock_di_container = MockDIContainer::new(); -        let output = castable_factory.call(mock_di_container); +        let output = castable_factory.call(&mock_di_container);          assert_eq!(output, TransientPtr::new(Bacon { heal_amount: 27 }));      } diff --git a/src/private/factory.rs b/src/private/factory.rs index 23b4e8f..94e1023 100644 --- a/src/private/factory.rs +++ b/src/private/factory.rs @@ -1,5 +1,3 @@ -use std::rc::Rc; -  use crate::private::cast::CastFrom;  use crate::ptr::TransientPtr; @@ -8,7 +6,7 @@ pub trait IFactory<ReturnInterface, DIContainerT>: CastFrom  where      ReturnInterface: 'static + ?Sized,  { -    fn call(&self, di_container: Rc<DIContainerT>) -> TransientPtr<ReturnInterface>; +    fn call(&self, di_container: &DIContainerT) -> TransientPtr<ReturnInterface>;  }  /// Interface for a threadsafe factory. diff --git a/src/provider/blocking.rs b/src/provider/blocking.rs index c719f59..1533f68 100644 --- a/src/provider/blocking.rs +++ b/src/provider/blocking.rs @@ -1,5 +1,4 @@  use std::marker::PhantomData; -use std::rc::Rc;  use crate::errors::injectable::InjectableError;  use crate::interfaces::injectable::Injectable; @@ -24,7 +23,7 @@ pub trait IProvider<DIContainerType>  {      fn provide(          &self, -        di_container: &Rc<DIContainerType>, +        di_container: &DIContainerType,          dependency_history: DependencyHistory,      ) -> Result<Providable<DIContainerType>, InjectableError>;  } @@ -58,7 +57,7 @@ where  {      fn provide(          &self, -        di_container: &Rc<DIContainerType>, +        di_container: &DIContainerType,          dependency_history: DependencyHistory,      ) -> Result<Providable<DIContainerType>, InjectableError>      { @@ -98,7 +97,7 @@ where  {      fn provide(          &self, -        _di_container: &Rc<DIContainerType>, +        _di_container: &DIContainerType,          _dependency_history: DependencyHistory,      ) -> Result<Providable<DIContainerType>, InjectableError>      { @@ -133,7 +132,7 @@ impl<DIContainerType> IProvider<DIContainerType> for FactoryProvider  {      fn provide(          &self, -        _di_container: &Rc<DIContainerType>, +        _di_container: &DIContainerType,          _dependency_history: DependencyHistory,      ) -> Result<Providable<DIContainerType>, InjectableError>      { @@ -168,7 +167,7 @@ mod tests          assert!(              matches!(                  transient_type_provider -                    .provide(&Rc::new(di_container), dependency_history_mock)?, +                    .provide(&di_container, dependency_history_mock)?,                  Providable::Transient(_)              ),              "The provided type is not transient" @@ -190,7 +189,7 @@ mod tests          assert!(              matches!(                  singleton_provider -                    .provide(&Rc::new(di_container), MockDependencyHistory::new())?, +                    .provide(&di_container, MockDependencyHistory::new())?,                  Providable::Singleton(_)              ),              "The provided type is not a singleton" @@ -215,7 +214,7 @@ mod tests          let default_factory_provider =              FactoryProvider::new(FactoryPtr::new(FooFactory), true); -        let di_container = Rc::new(MockDIContainer::new()); +        let di_container = MockDIContainer::new();          assert!(              matches!( diff --git a/src/test_utils.rs b/src/test_utils.rs index 41e3753..6071cfb 100644 --- a/src/test_utils.rs +++ b/src/test_utils.rs @@ -3,7 +3,6 @@ pub mod subjects      //! Test subjects.      use std::fmt::Debug; -    use std::rc::Rc;      use syrette_macros::declare_interface; @@ -51,7 +50,7 @@ pub mod subjects      impl<DIContainerT> Injectable<DIContainerT> for UserManager      {          fn resolve( -            _di_container: &Rc<DIContainerT>, +            _di_container: &DIContainerT,              _dependency_history: DependencyHistory,          ) -> Result<TransientPtr<Self>, crate::errors::injectable::InjectableError>          where @@ -115,7 +114,7 @@ pub mod subjects      impl<DIContainerT> Injectable<DIContainerT> for Number      {          fn resolve( -            _di_container: &Rc<DIContainerT>, +            _di_container: &DIContainerT,              _dependency_history: DependencyHistory,          ) -> Result<TransientPtr<Self>, crate::errors::injectable::InjectableError>          where  | 
