Typer Integration¶
Dependency injection for Typer is available in the wireup.integration.typer module.
Initialize the integration¶
First, create a container, add your Typer commands, and then initialize the integration.
import typer
import wireup
from wireup import Injected
app = typer.Typer()
@app.command()
def random_number(random: Injected[RandomService]) -> None:
typer.echo(f"Your lucky number is: {random.get_random()}")
container = wireup.create_sync_container(injectables=[RandomService, services])
wireup.integration.typer.setup(container, app)
setup must be called after all commands (including nested groups) have been added.
Inject in Typer Commands¶
Use Injected[T] or Annotated[T, Inject(...)] in command signatures.
from typing import Annotated
from wireup import Inject
@app.command()
def env_info(
env: Annotated[str, Inject(config="env")],
debug: Annotated[bool, Inject(config="debug")],
) -> None:
typer.echo(f"Environment: {env}")
typer.echo(f"Debug mode: {debug}")
Injected parameters are hidden from CLI help automatically.
Accessing the Container¶
from wireup.integration.typer import get_app_container
container = get_app_container(app)
Dependency Validation¶
wireup.integration.typer.setup(...) validates command callbacks during setup.
Missing dependencies and config values fail during setup.
See What Wireup Validates for the full rules.
API Reference¶
Visit API Reference for detailed information about the Typer integration module.