Dependency Graph
Analyze and visualize dependency relationships in your container.
Cycle Detection
Uses Tarjan's Strongly Connected Components algorithm to detect circular dependencies:
typescript
const result = container.validate();
if (!result.valid) {
for (const error of result.errors) {
console.error(error);
// "Circular dependency detected: A -> B -> C -> A"
}
}Visualizing Dependencies
typescript
// Get the dependency graph
const graph = container.getDependencyGraph();
// Detect cycles
const cycles = graph.detectCycles();
if (cycles.length > 0) {
console.log('Cycles found:', cycles);
}
// Get cycle analysis
const analysis = graph.getCycleAnalysis();
console.log(analysis);
// { cycles: [...], depth: 3, totalNodes: 10, cycleNodes: 3 }
// Find missing dependencies
const missing = graph.getMissingDependencies();
console.log('Missing:', missing);
// Get resolution order (topological sort)
const order = graph.getResolutionOrder();
console.log('Resolution order:', order);
// Visualize as string
const visualization = graph.visualize();
console.log(visualization);
// Dependency Graph:
// UserService [singleton] -> [UserRepository]
// UserRepository [singleton] -> [DatabaseConnection]
// DatabaseConnection [singleton] -> []Container Statistics
Track resolution performance:
typescript
const stats = container.getStatistics();
console.log(stats);
// {
// resolutions: 1500, // Total get() calls
// creates: 50, // New instance creations
// cacheHits: 1450, // Cache hits (singleton reuse)
// errors: 2 // Resolution errors
// }Calculating Metrics
typescript
const stats = container.getStatistics();
// Cache hit rate
const hitRate = stats.cacheHits / stats.resolutions;
console.log(`Cache hit rate: ${(hitRate * 100).toFixed(1)}%`);
// Error rate
const errorRate = stats.errors / stats.resolutions;
console.log(`Error rate: ${(errorRate * 100).toFixed(2)}%`);Best Practices
- Validate before production - Catch dependency issues early with
container.validate() - Monitor statistics - Track cache hit rates to identify performance issues
- Visualize complex graphs - Use
graph.visualize()for debugging - Check resolution order - Ensure dependencies resolve in expected order
Next Steps
- Injection Functions - Modern inject() API
- Testing - Testing dependency graphs
- API Reference - Complete API documentation