#web #di #ioc #dependency-injection #actix-web #actix

runtime_injector_actix

actix-web的运行时依赖注入容器

3个不稳定版本

0.2.0 2021年5月14日
0.1.1 2021年5月8日
0.1.0 2021年5月8日

#928 in HTTP服务器

MIT/Apache

160KB
2K SLoC

runtime_injector_actix

Current version Current documentation

此库提供类型帮助将服务注入到actix-web应用程序。

入门

创建您的注入器,然后将它添加到应用程序的app数据中

#[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
}

在您的请求处理器中使用 Injected<R> 注入依赖

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

最低支持的Rust版本

由于库仍在开发中,唯一支持的Rust版本是最新稳定版本的Rust。该库可能在较旧版本上运行,但没有保证。

许可证

此库的许可证为MIT或Apache 2.0,您可选择其一。

依赖项

~27MB
~562K SLoC