Skip to content

[Task] refactor: Consolidate DI containers — designate common_system service_container as ecosystem standard #363

Description

@kcenon

Background

Multiple systems in the kcenon ecosystem maintain their own Dependency Injection (DI) container implementations:

System DI Implementation Location
common_system service_container include/kcenon/common/di/service_container.h
logger_system lightweight_di_container src/impl/di/lightweight_di_container.h
monitoring_system service_registration include/kcenon/monitoring/di/service_registration.h
database_system database_context database/integrated/core/database_coordinator.h

The common_system::service_container is the most feature-complete implementation, providing:

  • Thread-safe registration and resolution
  • Service lifetimes: singleton, transient, scoped
  • Circular dependency detection
  • Container freezing for security
  • Global singleton instance

Having multiple DI containers creates:

  1. Cognitive overhead — developers must learn different registration patterns per system
  2. Integration friction — cross-system service resolution requires adapter boilerplate
  3. Inconsistent lifecycle management — each container handles lifetimes differently
  4. Testing complexity — mock injection differs across systems

Scope

Phase 1: Audit and compatibility analysis

  • Catalog all DI container usages in logger_system, monitoring_system, and database_system
  • Identify feature gaps between service_container and system-specific containers
  • Document required service_container enhancements (if any)

Phase 2: Enhance common_system service_container (if needed)

  • Add any missing features identified in Phase 1
  • Ensure lightweight registration path for systems with minimal DI needs
  • Add ecosystem module registration helpers

Phase 3: Migrate logger_system

  • Replace lightweight_di_container with service_container registration
  • Update writer/formatter/filter factory patterns
  • Verify all logger_system tests pass

Phase 4: Migrate monitoring_system

  • Replace service_registration with service_container integration
  • Update collector and exporter factories
  • Verify all monitoring_system tests pass

Phase 5: Migrate database_system

  • Refactor database_context to use service_container for backend resolution
  • Update adapter initialization patterns
  • Verify all database_system tests pass

Acceptance Criteria

  • common_system::service_container is the single DI container used across all systems
  • System-specific DI containers are removed (no dead code)
  • Cross-system service resolution works through a single container instance
  • All tests pass across all affected systems under ASAN and TSAN
  • No regressions in CI across all platforms
  • Migration guide documented for downstream consumers

Related Files

common_system:

  • include/kcenon/common/di/service_container.h
  • include/kcenon/common/di/service_container_interface.h

logger_system:

  • src/impl/di/lightweight_di_container.h

monitoring_system:

  • include/kcenon/monitoring/di/service_registration.h

database_system:

  • database/integrated/core/database_coordinator.h
  • database/integrated/adapters/

Related Systems

  • kcenon/logger_system — has own lightweight DI
  • kcenon/monitoring_system — has own service registration
  • kcenon/database_system — has own database_context DI pattern

Metadata

Metadata

Assignees

Labels

architectureArchitectural changes and designpriority:mediumMedium priority issuerefactoringCode refactoring and improvements

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions