async-di 0.1.0

Async dependency injection container
Documentation
mod provider;
pub use provider::{Provider, ProvideResult, Resolvable, StaticProvider};
mod error;
pub use error::Error;
mod resolver;
pub use resolver::{Resolver, ResolverBuilder, ResolverRef, Deferred};
mod helpers;

pub use async_trait::async_trait;
pub type Ref<T> = std::sync::Arc<T>;

#[derive(Debug)]
pub struct Container {
  registry: Resolver,
}

impl Container {
  pub fn new<F>(config: F) -> Self
    where F: FnOnce(&mut ResolverBuilder)
  {
    let mut builder = ResolverBuilder::new();

    config(&mut builder);

    Self {
      registry: builder.finalize()
    }
  }

  pub async fn resolve<S>(&self) -> Result<S, Error>
    where S: Resolvable
  {
    self.registry.resolve().await
  }
}