Sync
This commit is contained in:
127
BUG-006-DEPENDENCY-INJECTION-FAILURE.md
Normal file
127
BUG-006-DEPENDENCY-INJECTION-FAILURE.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user