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:
- Tests can create app instances with test settings.
- Startup composition is centralized.
- Routers stay focused.
- Deployment imports a stable
app.
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.