Supported frameworks

What you’ll learn

  • Which constructor/field patterns diwire can extract dependencies from.

Dataclass

Run locally

uv run python examples/ex_12_supported_frameworks/01_dataclass.py
"""Focused example: dataclass constructor dependency extraction."""

from __future__ import annotations

from dataclasses import dataclass

from diwire import Container


@dataclass(slots=True)
class Dependency:
    name: str


@dataclass(slots=True)
class Consumer:
    dependency: Dependency


def main() -> None:
    container = Container()
    dependency = Dependency(name="framework")
    container.add_instance(dependency)
    container.add(Consumer)

    print(
        f"dataclass_ok={container.resolve(Consumer).dependency is dependency}",
    )  # => dataclass_ok=True


if __name__ == "__main__":
    main()

NamedTuple

Run locally

uv run python examples/ex_12_supported_frameworks/02_namedtuple.py
"""Focused example: ``NamedTuple`` dependency extraction."""

from __future__ import annotations

from typing import NamedTuple

from diwire import Container


class Dependency:
    pass


class Consumer(NamedTuple):
    dependency: Dependency


def main() -> None:
    container = Container()
    dependency = Dependency()
    container.add_instance(dependency)
    container.add(Consumer)

    print(
        f"namedtuple_ok={container.resolve(Consumer).dependency is dependency}",
    )  # => namedtuple_ok=True


if __name__ == "__main__":
    main()

attrs

Run locally

uv run python examples/ex_12_supported_frameworks/03_attrs.py
"""Focused example: ``attrs.define`` dependency extraction."""

from __future__ import annotations

import attrs

from diwire import Container


class Dependency:
    pass


@attrs.define
class Consumer:
    dependency: Dependency


def main() -> None:
    container = Container()
    dependency = Dependency()
    container.add_instance(dependency)
    container.add(Consumer)

    print(f"attrs_ok={container.resolve(Consumer).dependency is dependency}")  # => attrs_ok=True


if __name__ == "__main__":
    main()

Pydantic

Run locally

uv run python examples/ex_12_supported_frameworks/04_pydantic.py
"""Focused example: pydantic v2 model field dependency extraction."""

from __future__ import annotations

import pydantic

from diwire import Container


class Dependency:
    pass


class Consumer(pydantic.BaseModel):
    model_config = pydantic.ConfigDict(arbitrary_types_allowed=True)
    dependency: Dependency


def main() -> None:
    container = Container()
    dependency = Dependency()
    container.add_instance(dependency)
    container.add(Consumer)

    print(
        f"pydantic_ok={container.resolve(Consumer).dependency is dependency}",
    )  # => pydantic_ok=True


if __name__ == "__main__":
    main()

msgspec

Run locally

uv run python examples/ex_12_supported_frameworks/05_msgspec.py
"""Focused example: ``msgspec.Struct`` field dependency extraction."""

from __future__ import annotations

import msgspec

from diwire import Container


class Dependency:
    pass


class Consumer(msgspec.Struct):
    dependency: Dependency


def main() -> None:
    container = Container()
    dependency = Dependency()
    container.add_instance(dependency)
    container.add(Consumer)

    print(
        f"msgspec_ok={container.resolve(Consumer).dependency is dependency}",
    )  # => msgspec_ok=True


if __name__ == "__main__":
    main()