babylon.engine.services

Service container for dependency injection.

This module provides a ServiceContainer dataclass that aggregates all dependencies needed by the simulation engine, enabling clean injection for testing and configuration.

Sprint 3: Central Committee (Dependency Injection) Paradox Refactor: Added GameDefines for centralized coefficients.

Classes

ServiceContainer(config, database, ...)

Container for all simulation services.

class babylon.engine.services.ServiceContainer(config, database, event_bus, formulas, defines)[source]

Bases: object

Container for all simulation services.

Aggregates the five core services needed by the simulation: - config: Immutable simulation parameters - database: Database connection for persistence - event_bus: Publish/subscribe communication - formulas: Registry of mathematical formulas - defines: Centralized game coefficients (Paradox Refactor)

Example

>>> container = ServiceContainer.create()
>>> rent = container.formulas.get("imperial_rent")
>>> container.event_bus.publish(Event(...))
>>> with container.database.session() as session:
...     # do database work
>>> container.database.close()
>>> default_org = container.defines.DEFAULT_ORGANIZATION
Parameters:
config: SimulationConfig
database: DatabaseConnection
event_bus: EventBus
formulas: FormulaRegistry
defines: GameDefines
classmethod create(config=None, defines=None)[source]

Factory method to create a fully-initialized container.

Creates all services with sensible defaults. Uses in-memory SQLite for database isolation in tests.

Parameters:
  • config (SimulationConfig | None) – Optional custom config. If None, uses default SimulationConfig.

  • defines (GameDefines | None) – Optional custom defines. If None, uses default GameDefines.

Return type:

ServiceContainer

Returns:

ServiceContainer with all services initialized

__init__(config, database, event_bus, formulas, defines)
Parameters:
Return type:

None