File tree Expand file tree Collapse file tree 2 files changed +17
-11
lines changed Expand file tree Collapse file tree 2 files changed +17
-11
lines changed Original file line number Diff line number Diff line change @@ -1187,17 +1187,12 @@ protected function resolveClass(ReflectionParameter $parameter)
1187
1187
{
1188
1188
$ className = Util::getParameterClassName ($ parameter );
1189
1189
1190
- // First, we check if the dependency has been explicitly bound in the container
1191
- // and if so, we will resolve it directly from there to respect any explicit
1192
- // bindings the developer has defined rather than using any default value.
1193
- if ($ this ->bound ($ className )) {
1194
- return $ this ->make ($ className );
1195
- }
1196
-
1197
- // If no binding exists, we will check if a default value has been defined for
1198
- // the parameter. If it has, we should return it to avoid overriding any of
1199
- // the developer specified default values for the constructor parameters.
1200
- if ($ parameter ->isDefaultValueAvailable ()) {
1190
+ // First we will check if a default value has been defined for the parameter.
1191
+ // If it has, and no explicit binding exists, we should return it to avoid
1192
+ // overriding any of the developer specified defaults for the parameters.
1193
+ if ($ parameter ->isDefaultValueAvailable () &&
1194
+ ! $ this ->bound ($ className ) &&
1195
+ $ this ->findInContextualBindings ($ className ) === null ) {
1201
1196
return $ parameter ->getDefaultValue ();
1202
1197
}
1203
1198
Original file line number Diff line number Diff line change @@ -319,6 +319,17 @@ public function testResolutionOfClassWithDefaultParameters()
319
319
$ this ->assertInstanceOf (ContainerConcreteStub::class, $ instance ->default );
320
320
}
321
321
322
+ public function testResolutionOfClassWithDefaultParametersAndContextualBindings ()
323
+ {
324
+ $ container = new Container ;
325
+
326
+ $ container ->when (ContainerClassWithDefaultValueStub::class)
327
+ ->needs (ContainerConcreteStub::class)
328
+ ->give (fn () => new ContainerConcreteStub );
329
+ $ instance = $ container ->make (ContainerClassWithDefaultValueStub::class);
330
+ $ this ->assertInstanceOf (ContainerConcreteStub::class, $ instance ->default );
331
+ }
332
+
322
333
public function testBound ()
323
334
{
324
335
$ container = new Container ;
You can’t perform that action at this time.
0 commit comments