/** * @covers DependencyInjection::getInstance * @todo Implement testGetInstance(). */ public function testGetInstance() { $this->assertTrue($this->object->getInstance(A::class) instanceof A); $this->object->setModule(I::class, B::class); $this->assertTrue($this->object->getInstance(I::class) instanceof B); $this->object->setModule(B::class, C::class); $this->assertTrue($this->object->getInstance(B::class) instanceof C); try { $this->object->getInstance('InexistantClassName'); $this->fail('Expected DependencyInjection_Exception'); } catch (DependencyInjection_Exception $ex) { } $p = $this->object->getInstance(P::class); $this->assertSame($p, $this->object->getInstance(P::class)); try { $this->object->getInstance(NI::class); $this->fail('Expected DependencyInjection_Exception'); } catch (DependencyInjection_Exception $ex) { } $ni = new NI(); $this->object->setInstance($ni); $this->assertSame($ni, $this->object->getInstance(NI::class)); $inject = $this->object->getInstance(Inject::class); $this->assertTrue($inject->i instanceof I); $this->assertTrue($inject->a instanceof A); $withoutFactory = $this->object->getInstance(WithoutCustomFactory::class); $this->assertSame(0, $withoutFactory->a); $this->assertSame(1, $withoutFactory->b); $withFactory = $this->object->getInstance(WithCustomFactory::class); $this->assertSame(5, $withFactory->a); $this->assertSame(3, $withFactory->b); $this->object->setModule(MyAbstractFactory::class, InvalidInterfaceFactory::class); try { $this->object->getInstance(WithAbstractFactory::class); $this->fail('Expected DependencyInjection_Exception'); } catch (DependencyInjection_Exception $ex) { } $this->object->setModule(MyAbstractFactory::class, InvalidImplFactory::class); try { $this->object->getInstance(WithAbstractFactory::class); $this->fail('Expected DependencyInjection_Exception'); } catch (DependencyInjection_Exception $ex) { } $this->object->setModule(MyAbstractFactory::class, ValidFactory::class); $withAbstract = $this->object->getInstance(WithAbstractFactory::class); $this->assertTrue($withAbstract->a instanceof A); $this->assertSame(9, $withAbstract->value); $this->object->setModule(MyAbstractFactory::class, ValidFactory2::class); $withAbstract = $this->object->getInstance(WithAbstractFactory::class); $this->assertTrue($withAbstract->a instanceof A); $this->assertSame(9 * 2, $withAbstract->value); }
class Config { private $data; public function __construct() { $this->data = ['dsn' => 'mysql:host=127.0.0.1;dbname=test', 'username' => 'test', 'password' => '']; } public function __get($name) { return $this->data[$name]; } } //Crée l'injecteur $injector = new DependencyInjection(); //Définie Database en tant que implémentation de PDO $injector->setModule(PDO::class, Database::class); //Seule une instance unique de PDO (ou Database) sera gardé en mémoire en utilisant l'injecteur $tickets = $injector->getInstance(PDO::class)->query('SELECT * FROM TICKET')->fetchAll(); ?> <!DOCTYPE html> <html> <head> <title>Mon blog</title> </head> <body> <h1>Mon blog</h1> <?php foreach ($tickets as $ticket) { ?> <article> <h2><?php