Configuration
The BookWorm application uses a comprehensive configuration system built on .NET's configuration framework, enhanced with Aspire-specific features and custom extensions.
Configuration Architecture
Configuration Sources
- appsettings.json - Base application settings
- appsettings.Environment.json - Environment-specific overrides
- Environment Variables - Container and cloud-native configuration
- Azure App Configuration - Centralized configuration management (when deployed to Azure)
- Launch Profiles - Development-time configuration
- Aspire Configuration - Service discovery and orchestration settings
Configuration Providers
- JSON Configuration Provider - File-based configuration
- Environment Variables Provider - System and container environment variables
- Azure Configuration Provider - Cloud-based configuration service
- Memory Configuration Provider - Runtime configuration overrides
Service-Specific Configuration
Service Defaults Configuration
- Document Options - OpenAPI documentation settings
- Authentication Options - Keycloak and JWT configuration
- Service Discovery - Aspire service registration settings
- Health Check Configuration - Health endpoint and check intervals
Database Configuration
- Connection Strings - PostgreSQL connection configuration
- Entity Framework Options - Database context and migration settings
- Naming Conventions - Snake case naming for PostgreSQL compatibility
- Connection Pooling - Database connection management
Message Bus Configuration
- RabbitMQ Settings - Message broker connection and queue configuration
- MassTransit Options - Message routing and serialization settings
- Retry Policies - Message delivery retry and error handling
- Dead Letter Queue - Failed message handling configuration
Environment Management
Development Environment
- Launch Profiles - Visual Studio and VS Code debugging configuration
- Local Service Discovery - Development-time service resolution
- Hot Reload Support - Configuration changes without restart
- Debug Logging - Enhanced logging for development
Staging/Production Environment
- Configuration Validation - Startup configuration validation
- Secrets Management - Secure storage of sensitive configuration
- Configuration Reloading - Runtime configuration updates
- Health Checks - Configuration-dependent health monitoring
Configuration Extensions
Custom Configuration Utilities
- Service Discovery Utilities - Helper methods for service endpoint resolution
- Launch Profile Extensions - Enhanced development configuration
- Configuration Validation - Strong typing and validation rules
- Environment Detection - Runtime environment identification
Aspire Integration
- Orchestrator Configuration - Service orchestration and dependency management
- Resource Configuration - Infrastructure resource configuration
- Service Binding - Automatic service endpoint configuration
- Configuration Binding - Strongly-typed configuration objects
Best Practices
Configuration Security
- Secrets Separation - Separate sensitive data from regular configuration
- Environment-Specific Secrets - Different secrets per environment
- Access Control - Restricted access to production configuration
- Encryption - Encrypted configuration values for sensitive data
Configuration Validation
- Startup Validation - Validate configuration at application startup
- Required Settings - Fail fast for missing critical configuration
- Type Safety - Use strongly-typed configuration objects
- Default Values - Sensible defaults for optional settings
Configuration Monitoring
- Configuration Changes - Track and audit configuration modifications
- Health Checks - Monitor configuration-dependent services
- Logging - Log configuration loading and validation events
- Metrics - Track configuration-related performance metrics