Simple zero cost dependency injection library made for rust
Add the following to your Cargo.toml
:
toml
[dependencies]
nject = "0.1"
```rust use nject::{injectable, provider};
struct DepOne;
struct DepTwo { dep: DepOne, }
struct Facade { dep: DepTwo, }
struct Provider;
fn main() { let _facade: Facade = Provider.inject(); }
```
```rust use nject::{injectable, provide, provider};
struct DepOne;
struct Facade<'a> { dep: &'a DepOne, }
struct Provider<'a> { shared: &'a DepOne, }
fn main() { let provider = Provider { shared: &DepOne }; let _facade: Facade = provider.inject(); }
```
```rust use nject::{injectable, provide, provider};
trait Greeter { fn greet(&self); }
struct GreeterOne;
impl Greeter for GreeterOne { fn greet(&self) { println!("Greeting"); } }
struct Facade<'a> {
boxeddep: Box
struct Provider { greeter: GreeterOne, }
fn main() { let provider = Provider { greeter: GreeterOne }; let _facade: Facade = provider.inject(); }
```
```rust use nject::{injectable, provider};
struct DepOne;
struct Facade
struct Provider;
fn main() {
let _facade: Facade
```
```rust use nject::{injectable, provide, provider};
trait Greeter { fn greet(&self); }
struct DevGreeter;
impl Greeter for DevGreeter { fn greet(&self) { println!("Greeting Dev"); } }
struct ProdGreeter;
impl Greeter for ProdGreeter { fn greet(&self) { println!("Greeting production"); } }
struct Facade<'a> { dep: &'a dyn Greeter, }
struct Provider<'a, T: Greeter>(&'a T);
fn main() { let devfacade: Facade = Provider(&DevGreeter).inject(); let prodfacade: Facade = Provider(&ProdGreeter).inject(); } ```
```rust use nject::{inject, injectable, provide, provider};
struct NonInjectableWithInjectAttr { noninjectablevalue: i32, }
struct NonInjectable { noninjectablevalue: i32, }
struct Facade { depfrominjected: NonInjectableWithInjectAttr, #[inject(NonInjectable { noninjectablevalue: 456 })] depfrominjectattr: NonInjectable, #[inject(NonInjectableWithInjectAttr { noninjectablevalue: 789 })] depfrominjectattr_override: NonInjectableWithInjectAttr, }
struct Provider;
fn main() {
let _facade = Provider.inject::
You can look into the axum example for a web API use case.