Expand description
PortalDI is an ergonomic, lightweight and compile-time dependency injection library.
§Features
-
Natively async support
- Support for asynchronous component creation.
- Components and traits must be
thread-safe
(Sync + Send
) in non Wasm target.
-
Ergonomic apis
- In most cases, you can use target types directly instead of using containers.
ⓘ// for a concrete type. let hoge: DI<HogeService> = HogeService::di(); // for a trait. (through DIProvider) let hoge: DI<dyn HogeService> = HogeServiceProvider::di();
-
DRY support by macros
- Almost boiler codes can be generated by proc macros.
ⓘ#[derive(DIPortal)] struct HogeService { foo: DI<FooService>, ..., }
Modules§
Macros§
- Generate a [
AsyncDIProvider
] implementation. - Generate a [
DIProvider
] implementation.
Structs§
- DI container holds component refs.
Traits§
- Add
di
methods for DI target types that needs async creation. - Provides component instance for trait DI types that needs async creation.
- Add
di
methods for DI target types. - Provides component instance for trait DI types.
Type Aliases§
- Represents depencency (component) type.
Attribute Macros§
- Generate a [
DIProvider
] or [AsyncDIProvider
] implementation. (attribute macro)
Derive Macros§
- Generate a
DIPortal
or [AsyncDIPortal
] implementation. (derive macro)