public function testBind() { $container = new Container(); $container->bind(AutoResolveTestDependInterface::class, AutoResolveTestDepend::class); $instance1 = $container->get(AutoResolveTestDepend::class); $instance2 = $container->get(AutoResolveTestDependInterface::class); static::assertInstanceOf(AutoResolveTestDepend::class, $instance1); static::assertInstanceOf(AutoResolveTestDependInterface::class, $instance1); static::assertSame($instance1, $instance2); }
public function testAutoWiringEachOther() { $container = new Container(); $container->bind(Reader::class, AnnotationReader::class); // add annotation. $container->bind(AutoWiringTestEachOther1::class)->wire(); $container->bind(AutoWiringTestEachOther2::class)->wire(); $object = $container->get(AutoWiringTestEachOther1::class); static::assertInstanceOf(AutoWiringTestEachOther2::class, $object->getDepend()); static::assertInstanceOf(AutoWiringTestEachOther1::class, $object->getDepend()->getDepend()); $container = new Container(); $container->bind(Reader::class, AnnotationReader::class); // add annotation. $container->bind(AutoWiringTestEachOther1::class)->wire(); $container->bind(AutoWiringTestEachOther2::class)->wire(); $object = $container->get(AutoWiringTestEachOther2::class); static::assertInstanceOf(AutoWiringTestEachOther1::class, $object->getDepend()); static::assertInstanceOf(AutoWiringTestEachOther2::class, $object->getDepend()->getDepend()); }
public function testBindFactory() { $container = new Container(); $container->bind(ChainMethodTestDependInterface::class, ChainMethodTestDepend::class); // all same $object1 = $container[ChainMethodTestDependInterface::class]; static::assertSame($object1, $container[ChainMethodTestDependInterface::class]); static::assertSame($object1, $container[ChainMethodTestDependInterface::class]); static::assertSame($object1, $container[ChainMethodTestDependInterface::class]); // reset $container = new Container(); $container->bind(ChainMethodTestDependInterface::class, ChainMethodTestDepend::class)->factory(true); $object2 = $container[ChainMethodTestDependInterface::class]; // all not same $object2_1 = $container[ChainMethodTestDependInterface::class]; static::assertNotSame($object2, $object2_1); static::assertEquals($object2, $object2_1); $object2_2 = $container[ChainMethodTestDependInterface::class]; static::assertNotSame($object2, $object2_2); static::assertEquals($object2, $object2_2); static::assertNotSame($object2_1, $object2_2); static::assertEquals($object2_1, $object2_2); }
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); }
public function testCallMultiParamsClassWithArguments() { $container = new Container(); try { $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam'); static::fail(); } catch (CannotResolveException $e) { static::assertEquals(null, $e->getClass()); static::assertEquals('param1', $e->getParameter()); } $container->bind(CallTestDependencyInterface::class, CallTestDependency::class); try { $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam'); static::fail(); } catch (CannotResolveException $e) { static::assertEquals(null, $e->getClass()); static::assertEquals('param2', $e->getParameter()); } // only sequential $result = $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam', [$param1 = new CallTestDependency(), $param2 = new stdClass()]); static::assertSame($param1, $result[0]); static::assertSame($param2, $result[1]); static::assertSame('param3', $result[2]); static::assertSame('param4', $result[3]); // only assoc $result = $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam', ['param2' => $param2 = new stdClass(), 'param4' => $param4 = new stdClass()]); static::assertInstanceOf(CallTestDependencyInterface::class, $result[0]); static::assertSame($param2, $result[1]); static::assertSame('param3', $result[2]); static::assertSame($param4, $result[3]); // complex $result = $container->call(__NAMESPACE__ . '\\callTestFunctionHasMultiParam', [$param1 = new CallTestDependency(), $param2 = new stdClass(), 'param4' => $param4 = new stdClass(), 'param3' => $param3 = new stdClass()]); static::assertSame($param1, $result[0]); static::assertSame($param2, $result[1]); static::assertSame($param3, $result[2]); static::assertSame($param4, $result[3]); }