128 lines
4.7 KiB
Markdown
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
|