Guide Home Part 1 - FastAPI Foundations Part 2 - Building Applications Part 3 - Pages and HTML Part 4 - Security and Deployment Part 5 - Going Further Capstone Build Plan Markdown Source All Guides

Chapter 9: Registering Services and Application Composition

ASP.NET Core centralizes registration in Program.cs and extension methods. Python usually uses explicit module-level composition.

Recommended pattern:

# src/recipevault/app_factory.py
from fastapi import FastAPI

from recipevault.api import recipes, users
from recipevault.settings import Settings


def create_app(settings: Settings | None = None) -> FastAPI:
    settings = settings or Settings()
    app = FastAPI(title=settings.app_name)
    app.state.settings = settings
    app.include_router(recipes.router)
    app.include_router(users.router)
    return app

Then:

# src/recipevault/main.py
from recipevault.app_factory import create_app

app = create_app()

Benefits:

Python service registration is often "just imports and constructors." Use that until you need something more formal. If you introduce a DI container library, document why.