public function testCreateMultiParamsClassWithArguments() { $container = new Container(); try { $container->create(CreateTestHasMultiParam::class); static::fail(); } catch (CannotResolveException $e) { static::assertEquals(CreateTestHasMultiParam::class, $e->getClass()); static::assertEquals('param1', $e->getParameter()); } $container->bind(CreateTestDependencyInterface::class, CreateTestDependency::class); try { $container->create(CreateTestHasMultiParam::class); static::fail(); } catch (CannotResolveException $e) { static::assertEquals(CreateTestHasMultiParam::class, $e->getClass()); static::assertEquals('param2', $e->getParameter()); } // only sequential $object = $container->create(CreateTestHasMultiParam::class, [$param1 = new CreateTestDependency(), $param2 = new stdClass()]); static::assertSame($param1, $object->param1); static::assertSame($param2, $object->param2); static::assertSame('param3', $object->param3); static::assertSame('param4', $object->param4); // only assoc $object = $container->create(CreateTestHasMultiParam::class, ['param2' => $param2 = new stdClass(), 'param4' => $param4 = new stdClass()]); static::assertInstanceOf(CreateTestDependencyInterface::class, $object->param1); static::assertSame($param2, $object->param2); static::assertSame('param3', $object->param3); static::assertSame($param4, $object->param4); // complex $object = $container->create(CreateTestHasMultiParam::class, [$param1 = new CreateTestDependency(), $param2 = new stdClass(), 'param4' => $param4 = new stdClass(), 'param3' => $param3 = new stdClass()]); static::assertSame($param1, $object->param1); static::assertSame($param2, $object->param2); static::assertSame($param3, $object->param3); static::assertSame($param4, $object->param4); }