Files
ColaFlow/BUG-006-DEPENDENCY-INJECTION-FAILURE.md
Yaojia Wang b11c6447b5
Some checks failed
Code Coverage / Generate Coverage Report (push) Has been cancelled
Tests / Run Tests (9.0.x) (push) Has been cancelled
Tests / Docker Build Test (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Sync
2025-11-08 18:13:48 +01:00

128 lines
4.7 KiB
Markdown

# BUG-006: Dependency Injection Failure - IApplicationDbContext Not Registered
## Severity
**CRITICAL (P0) - Application Cannot Start**
## Status
**OPEN** - Discovered during Docker validation after BUG-005 fix
## Priority
**P0 - Fix Immediately** - Blocks all development work
## Discovery Date
2025-11-05
## Environment
- Docker environment
- Release build
- .NET 9.0
## Summary
The application fails to start due to a missing dependency injection registration. The `IApplicationDbContext` interface is not registered in the DI container, causing all Sprint command handlers to fail validation at application startup.
## Root Cause Analysis
### Problem
The `ModuleExtensions.cs` file (used in `Program.cs`) registers the `PMDbContext` but **does NOT** register the `IApplicationDbContext` interface that Sprint command handlers depend on.
### Affected Files
1. **c:\Users\yaoji\git\ColaCoder\product-master\colaflow-api\src\ColaFlow.API\Extensions\ModuleExtensions.cs**
- Lines 39-46: Only registers `PMDbContext`, missing interface registration
### Comparison
**Correct Implementation** (in ProjectManagementModule.cs - NOT USED):
```csharp
// Line 44-45
// Register IApplicationDbContext
services.AddScoped<IApplicationDbContext>(sp => sp.GetRequiredService<PMDbContext>());
```
**Broken Implementation** (in ModuleExtensions.cs - CURRENTLY USED):
```csharp
// Lines 39-46
services.AddDbContext<PMDbContext>((serviceProvider, options) =>
{
options.UseNpgsql(connectionString);
var auditInterceptor = serviceProvider.GetRequiredService<AuditInterceptor>();
options.AddInterceptors(auditInterceptor);
});
// ❌ MISSING: IApplicationDbContext registration!
```
## Steps to Reproduce
1. Clean Docker environment: `docker-compose down -v`
2. Build backend image: `docker-compose build backend`
3. Start services: `docker-compose up -d`
4. Check backend logs: `docker-compose logs backend`
## Expected Behavior
- Application starts successfully
- All dependencies resolve correctly
- Sprint command handlers can be constructed
## Actual Behavior
Application crashes at startup with:
```
System.AggregateException: Some services are not able to be constructed
System.InvalidOperationException: Unable to resolve service for type 'ColaFlow.Modules.ProjectManagement.Application.Common.Interfaces.IApplicationDbContext'
while attempting to activate 'ColaFlow.Modules.ProjectManagement.Application.Commands.UpdateSprint.UpdateSprintCommandHandler'
```
## Affected Components
All Sprint command handlers fail to construct:
- `UpdateSprintCommandHandler`
- `StartSprintCommandHandler`
- `RemoveTaskFromSprintCommandHandler`
- `DeleteSprintCommandHandler`
- `CreateSprintCommandHandler`
- `CompleteSprintCommandHandler`
- `AddTaskToSprintCommandHandler`
## Impact
- **Application cannot start** - Complete blocker
- **Docker environment unusable** - Frontend developers cannot work
- **All Sprint functionality broken** - Even if app starts, Sprint CRUD would fail
- **Development halted** - No one can develop or test
## Fix Required
Add the missing registration to `ModuleExtensions.cs`:
```csharp
// In AddProjectManagementModule method, after line 46:
// Register IApplicationDbContext interface
services.AddScoped<ColaFlow.Modules.ProjectManagement.Application.Common.Interfaces.IApplicationDbContext>(
sp => sp.GetRequiredService<PMDbContext>());
```
## Alternative Fix (Better Long-term)
Consider using the `ProjectManagementModule` class (which has correct registration) instead of duplicating logic in `ModuleExtensions.cs`. This follows the Single Responsibility Principle and reduces duplication.
## Test Plan (After Fix)
1. Local compilation: `dotnet build` - should succeed
2. Docker build: `docker-compose build backend` - should succeed
3. Docker startup: `docker-compose up -d` - all containers should be healthy
4. Backend health check: `curl http://localhost:5000/health` - should return "Healthy"
5. Verify logs: No DI exceptions in backend logs
6. API smoke test: Access Swagger UI at `http://localhost:5000/scalar/v1`
## Related Bugs
- BUG-005 (Compilation error) - Fixed
- This bug was discovered **after** BUG-005 fix during Docker validation
## Notes
- This is a **runtime bug**, not a compile-time bug
- The error only appears when ASP.NET Core validates the DI container at startup (line 165 in Program.cs: `var app = builder.Build();`)
- Local development might not hit this if developers use different startup paths
- Docker environment exposes this because it validates all services on startup
## QA Recommendation
**NO GO** - Cannot proceed with Docker environment delivery until this is fixed.
## Severity Justification
- **Critical** because application cannot start
- **P0** because it blocks all development work
- **Immediate fix required** - no workarounds available