[−][src]Crate teloc
There are 2 types can be provider of services: ServiceProvider
and Scope
. First used as store for dependencies with
Instance
and Singleton
lifetimes, and for declaring all dependencies using .add_*()
methods. Scope
can be
created from ServiceProvider
object by calling method ServiceProvider::scope
.
There are four lifetimes for dependencies:
Transient
. Service will be created when resolves. Can depend on dependencies with anything lifetime. If depend on dependency withScoped
lifetime can be resolves only fromScope
object.Scoped
. Service will be created once atScope
when it resolved (lazy). Can depend on dependencies with anything lifetime.Singleton
. Service will be created once atServiceProvider
when it resolved (lazy). Can depend on dependencies with anything lifetime excludeScoped
.Instance
. Dependency was created outside ofServiceProvider
.
Process of working with library:
- Define your structs.
- Create constructors and add
#[inject]
macro on its. - Create a
ServiceProvider
object. - Add your services and dependencies using
ServiceProvider::add_*
methods. - Create
Scope
if need. - Get service from container using
.resolve()
method. - Work with service.
Example:
use teloc::*; struct ConstService { number: i32, } #[inject] impl ConstService { pub fn new(number: i32) -> Self { ConstService { number } } } // derive macro can be used when all fields implement `Dependency` trait, // but we do not recommend use it in production code #[derive(Dependency)] struct Controller { number_service: ConstService, } let container = ServiceProvider::new() .add_transient::<ConstService>() .add_transient::<Controller>(); let scope = container.fork().add_instance(10); let controller: Controller = scope.resolve(); assert_eq!(controller.number_service.number, 10);
Modules
container | This is a section for advanced usage. For common usage you can not read this page. |
get_dependencies | This is a section for advanced usage. For common usage you can not read this page. |
Structs
ServiceProvider |
|
Traits
Dependency | Trait is used to working with |
Resolver | This trait is used to resolve some object from service provider. Generic |
Attribute Macros
inject | Macro can be used on free functions and impls, including impl traits, with only one implement
method. It will generate |
Derive Macros
Dependency | Derive macro can be used on structs with named fields when all fields implements |