[12.x] Reduce direct container dependencies with proper dependency injection #57746
+178
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR reduces direct dependencies on
Container::getInstance()static calls throughout the Laravel framework by introducing proper dependency injection patterns and a new container interaction trait.Changes Made
New Container Interaction Foundation
Updated Components
Database Layer (DetectsConcurrencyErrors)
setConcurrencyContainer()method for dependency injectionConsole Scheduling (Schedule)
HTTP Layer (UploadedFile)
Key Features
Improved Dependency Injection
Backward Compatibility
Enhanced Testability
Consistent Container API
Benefits
Container Operations Provided
The InteractsWithContainer trait offers:
resolve()- Service resolution with type hintsbound()- Service binding checksbind()- Service binding registrationsingleton()- Singleton binding registrationinstance()- Instance registrationcall()- Method injection and callinghasMethodBinding()/callMethodBinding()- Advanced method binding supportTesting
Migration Path
For developers wanting to adopt the new patterns:
This enhancement establishes a foundation for better dependency injection patterns throughout the Laravel framework while maintaining complete backward compatibility.