Lockjaw
Lockjaw is a fully static, compile-time dependency injection framework for Rust inspired by Dagger. It is also what you get when jabbed by a rusty dagger.
Features:
- Compile time dependency graph validation with helpful diagnostic messages. The code won't compile if a dependency is missing or there are cyclic dependencies.
- Cross-crate injection. Libraries can provide different implementations like prod and test, and allow clients to choose from them.
- Aims for feature parity with Dagger. If you have used Dagger before, lockjaw should feel familiar.
- Implemented:
@Inject=>#[inject]constructor injection in#[injectable]@Provides=>#[provides]bind method return values@Binds=>#[binds]bind trait to implementation.@Singleton/@Scope=>scope=componentshared instance.@Named=>#[qualified]Provider<T>=>Provider<T>create multiple instances at run time.Lazy<T>=>Lazy<T>create and cache instance only when used.- Subcomponents
=>
#[subcomponent]Dynamically creatable sub-scopes with additional bindings - Multibindings
=>
#[into_vec]/#[into_map]Collect same bindings to a Vec/HashMap, useful for plugin systems. @BindsOptionalOf=>#[binds_option_of]Allow some bindings to be missing- Factories
=>
#[facotry]create objects with both injected fields and runtime fields. - Hilt
=>
#[define_component]/#[entry_point/install_inAutomatic module collection from build dependency.
- Todo
- Producers async dependency injection. Might not be too useful comparing to async/await
- Implemented:
See user guide for more information.
Example:
use *;
use Add;
prologue!;
// Allow GreetCounter to be created in the dependency graph. These bindings are available anywhere.
// Declare a module so we can do special bindings. These bindings are only available if the
// component installs the module, so different bindings can be used based on the situation.
// Components stitch modules and injectables together into a dependency graph, and can create
// objects in the graph. The component installs modules listed in `modules`
// called after the last use of lockjaw to perform validation and code generation
epilogue!;
Disclaimer
This is not an officially supported Google product.
Lockjaw is currently in early development and all APIs are subjected to changes. Some feature are also implemented in a hacky way. Use at your own risk.