跳转到主要内容

依赖注入工具包

项目描述

di: 依赖注入工具包

Test Coverage Package version Supported Python versions

di是一个现代的依赖注入工具包,模仿了FastAPI的依赖注入的简洁性。

主要功能

  • 直观:简单的API,灵感来自FastAPI
  • 自动装配di支持使用类型注解进行自动装配。
  • 作用域:受pytest作用域的启发,但由用户定义(没有固定的“请求”或“会话”作用域)。
  • 可组合:解耦的内部API为您提供了定制连接、执行和绑定的灵活性。
  • 高效di 可以并行执行依赖项并缓存结果。性能关键部分是用 🦀 通过 graphlib2 编写的。

安装

pip install di[anyio]

⚠️ 此项目仍在开发中。在 1.X.Y 版本发布之前,请预期会有破坏性变更。⚠️

简单示例

以下是一个展示 di 如何工作的简单示例

from dataclasses import dataclass

from di import Container
from di.dependent import Dependent
from di.executors import SyncExecutor


class A:
    ...


class B:
    ...


@dataclass
class C:
    a: A
    b: B


def main():
    container = Container()
    executor = SyncExecutor()
    solved = container.solve(Dependent(C, scope="request"), scopes=["request"])
    with container.enter_scope("request") as state:
        c = solved.execute_sync(executor=executor, state=state)
    assert isinstance(c, C)
    assert isinstance(c.a, A)
    assert isinstance(c.b, B)

更多示例,请参阅我们的 文档

为什么我需要在 Python 中使用依赖注入?那不是 Java 的事情吗?

依赖注入是一种软件架构技术,有助于我们实现 控制反转依赖倒置(SOLID 五大设计原则之一)。

人们普遍认为,传统的软件开发原则不适用于 Python。实际上,你可能已经在使用很多这些技术了!

例如,httpx 的 Client 的 transport 参数(文档)是依赖注入的一个绝佳示例。Pytest,可以说是最受欢迎的 Python 测试框架,以 pytest fixtures 的形式使用依赖注入。

大多数 Web 框架都采用了控制反转:当你定义视图/控制器时,Web 框架会调用你!这同样适用于 CLI(如 click)或 TUI(如 Textual)。这对许多新 Web 框架尤其如此,这些框架不仅使用控制反转,还使用依赖注入。两个很好的例子是 FastAPIBlackSheep

有关与依赖注入相关的 Python 项目的更全面概述,请参阅 Awesome Dependency Injection in Python

项目目标

本项目旨在成为一个依赖注入工具包,重点关注为其他库提供底层依赖注入功能。

换句话说,虽然您可以将此作为独立的依赖注入框架使用,但您可能会发现它有些简略且冗长。还有许多更成熟的独立依赖注入框架;我建议至少了解一下 python-dependency-injector,因为它是目前最受欢迎/最广泛使用的之一。

有关更多背景信息,请参阅我们的 文档

在 GitHub 上查看此版本: v0.79.2

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

di-0.79.2.tar.gz (20.5 kB 查看哈希值)

上传时间 源代码

构建分发

di-0.79.2-py3-none-any.whl (24.2 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面