runtime_injector_actix

Crates.ioruntime_injector_actix
lib.rsruntime_injector_actix
version0.2.0
sourcesrc
created_at2021-05-08 03:02:44.258262
updated_at2021-05-14 06:53:01.426818
descriptionRuntime dependency injection container for actix-web
homepage
repositoryhttps://github.com/TehPers/runtime_injector
max_upload_size
id394700
size52,083
TehPers (TehPers)

documentation

https://docs.rs/runtime_injector_actix

README

runtime_injector_actix

Current version Current documentation

This library provides types to help with injecting services into actix-web applications.

Getting started

Create your injector, then add it as app data to your application:

#[actix::main]
async fn main() -> std::io::Result<()> {
    // Define a module so the container knows what to inject
    let module = define_module! {
        #[cfg(not(test))]
        services = [
            UserAuthenticator::new.transient(),
        ],
        #[cfg(not(debug_assertions))]
        interfaces = {
            dyn UserDatabase = [SqlUserDatabase::new.singleton()],
        },
        #[cfg(debug_assertions)]
        interfaces = {
            dyn UserDatabase = [JsonUserDatabase::new.singleton()],
        },
    };

    // Configure and build the container
    let mut builder = Injector::builder();
    builder.add_module(module);
    let injector = builder.build();

    // Now add it as app data to the application
    HttpServer::new(|| App::new().app_data(injector.clone()).service(index))
        .bind(("127.0.0.1", 8080))?
        .run()
        .await
}

Inject dependencies with Injected<R> in your request handlers:

#[get("/")]
async fn index(
    user_db: Injected<Svc<dyn UserDatabase>>,
    user_auth: Injected<Box<UserAuthenticator>>,
) -> impl Responder {
    todo!()
}

Minimum supported Rust version

As the library is still in development, the only supported Rust version is the most recent version of stable Rust. The library may work on older versions, but there is no guarantee.

License

This library is licensed under your choice of either MIT or Apache 2.0.

Commit count: 159

cargo fmt