diff options
author | HampusM <hampus@hampusmat.com> | 2022-10-29 14:38:51 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-10-29 14:40:11 +0200 |
commit | aa548ded39c7ba1927019c748c359523b21d59e8 (patch) | |
tree | 779d104f85009dd831e6af6e7a523258a1ab5be9 /examples | |
parent | da94fd3b7dd2265f10957d0f5276881beb057d82 (diff) |
refactor!: add dependency history type
BREAKING CHANGE: Binding builders & configurators now take dependency history type arguments, the DetectedCircular variant of InjectableError now contains a dependency history field & the injectable traits take dependency history instead of a Vec
Diffstat (limited to 'examples')
-rw-r--r-- | examples/prevent-circular/main.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/examples/prevent-circular/main.rs b/examples/prevent-circular/main.rs new file mode 100644 index 0000000..7e10024 --- /dev/null +++ b/examples/prevent-circular/main.rs @@ -0,0 +1,48 @@ +#![deny(clippy::all)] +#![deny(clippy::pedantic)] +#![allow(clippy::disallowed_names)] +use std::error::Error; + +use syrette::di_container::blocking::prelude::*; +use syrette::injectable; +use syrette::ptr::TransientPtr; + +struct Foo +{ + bar: TransientPtr<Bar>, +} + +#[injectable] +impl Foo +{ + fn new(bar: TransientPtr<Bar>) -> Self + { + Self { bar } + } +} + +struct Bar +{ + foo: TransientPtr<Foo>, +} + +#[injectable] +impl Bar +{ + fn new(foo: TransientPtr<Foo>) -> Self + { + Self { foo } + } +} + +fn main() -> Result<(), anyhow::Error> +{ + let mut di_container = DIContainer::new(); + + di_container.bind::<Foo>().to::<Foo>()?; + di_container.bind::<Bar>().to::<Bar>()?; + + let foo = di_container.get::<Foo>()?.transient()?; + + Ok(()) +} |