# Story 1.1: Enhanced Dependency Injection Container

## Metadata
- **Story ID**: 1.1
- **Title**: Enhanced Dependency Injection Container
- **Epic**: 1 - Core Kernel & Infrastructure
- **Status**: Completed
- **Priority**: High
- **Estimated Time**: 3-4 hours
- **Dependencies**: 0.5

## Goal
Extend the DI container to provide core kernel infrastructure services only (no business logic services) with proper lifecycle management, dependency resolution, and service override support.

## Description
This story extends the basic DI container to support core kernel services only: config, logger, health checks, metrics, error bus, observability, and service registry. The container must handle service initialization order, lifecycle management, and provide a clean way to override services for testing.

**Note:** Business services (Auth, Identity, Authz, Audit) are NOT in the core kernel. They are separate services implemented in Epic 2.

## Deliverables

### 1. Extended DI Container (`internal/di/container.go`)
- Registration of all core services
- Lifecycle management via FX
- Service override support for testing
- Dependency resolution
- Error handling during initialization

### 2. Provider Functions (`internal/di/providers.go`)
Complete provider functions for core kernel services only:

- `ProvideConfig() fx.Option` - Configuration provider
- `ProvideLogger() fx.Option` - Logger provider
- `ProvideHealthCheckers() fx.Option` - Health check registry provider
- `ProvideMetrics() fx.Option` - Prometheus metrics registry provider
- `ProvideErrorBus() fx.Option` - Error bus provider
- `ProvideTracer() fx.Option` - OpenTelemetry tracer provider
- `ProvideServiceRegistry() fx.Option` - Service registry provider (Consul)

**Note:** Database provider is NOT in core kernel - each service will create its own database client.

### 3. Core Module (`internal/di/core_module.go`)
- Export `CoreModule() fx.Option` that provides all core services
- Easy composition with future modules
- Single import point for core services

## Implementation Steps

1. **Extend Container**
   - Update `internal/di/container.go`
   - Add support for all core services
   - Implement lifecycle hooks

2. **Create Provider Functions**
   - Create `internal/di/providers.go`
   - Implement all provider functions
   - Handle dependencies correctly

3. **Create Core Module**
   - Create `internal/di/core_module.go`
   - Export CoreModule function
   - Document usage

4. **Test Integration**
   - Verify all services are provided
   - Test service overrides
   - Test lifecycle hooks

## Acceptance Criteria
- [x] All core kernel services are provided via DI container
- [x] Services are initialized in correct dependency order
- [x] Lifecycle hooks work for all services
- [x] Services can be overridden for testing
- [x] DI container compiles without errors
- [x] CoreModule can be imported and used
- [x] Error handling works during initialization
- [x] No business logic services in core kernel
- [x] Service registry provider is included

## Related ADRs
- [ADR-0003: Dependency Injection Framework](../../adr/0003-dependency-injection-framework.md)

## Implementation Notes
- Use FX's dependency injection features
- Ensure proper initialization order
- Support service overrides via FX options
- Handle errors gracefully during startup
- Document provider functions

## Testing
```bash
# Test DI container
go test ./internal/di/...

# Test service injection
go run cmd/platform/main.go
```

## Files to Create/Modify
- `internal/di/container.go` - Extended container
- `internal/di/providers.go` - Provider functions
- `internal/di/core_module.go` - Core module export

