Chassis
Compile-time dependency injector for Rust inspired by Dagger 2
Goals
- Detect errors at compile time like missing dependencies or cyclic dependencies
- No need to annotate your classes (support for third-party classes)
- No required usage of
std::sync::Arc
- Zero overhead: Fast as hand-written code
- No use of runtime type information
Features
- Unscoped: create a new instance everytime
- default
- Type must not implement
Clone
- Singletons: only one instance per component
- Type must implement
Clone
- Created when component is created
- Type must implement
Example
use Rc;
// define your business logic
/// printer trait
/// a printer implementation
;
/// greeter for messages
/// module that is parsed to create the dependency injection
/// code
Missing features
- Request reference (access singletons without cloning)
- Lazy singletons (create singletons when needed)
- Lazy requests (request a factory instead of concrete type)
- Optional requests (only get it when it exists)
- Multiple provider (useful for plugins)
- Failable module functions (return
Result
in module)