/**
  * Obtains a new instance of $modelClassName, using a dependency injection
  * container if possible.
  *
  * @param string $modelClassName name of the model
  *
  * @return object
  */
 public function factory($modelClassName)
 {
     if ($this->dependencyInjector) {
         return $this->dependencyInjector->getInstance($modelClassName);
     }
     $model = new $modelClassName();
     return $model;
 }
 /**
  * Test dependency injection with RedBeanPHP.
  * 
  * @return void
  */
 public function testDependencyInjection()
 {
     // base scenario
     $geek = R::dispense('geek');
     list($coffee, $cocoa) = $geek->getObjects();
     asrt($coffee instanceof Dependency_Coffee, FALSE);
     asrt($cocoa instanceof Dependency_Cocoa, FALSE);
     // Base scenario with empty container, don't fail
     $di = new RedBean_DependencyInjector();
     $geek = R::dispense('geek');
     list($coffee, $cocoa) = $geek->getObjects();
     asrt($coffee instanceof Dependency_Coffee, FALSE);
     asrt($cocoa instanceof Dependency_Cocoa, FALSE);
     // Succesfull scenario, one missing
     $di = new RedBean_DependencyInjector();
     $di->addDependency('Coffee', new Dependency_Coffee());
     RedBean_ModelHelper::setDependencyInjector($di);
     $geek = R::dispense('geek');
     list($coffee, $cocoa) = $geek->getObjects();
     asrt($coffee instanceof Dependency_Coffee, TRUE);
     asrt($cocoa instanceof Dependency_Cocoa, FALSE);
     // Success scenario
     $di = new RedBean_DependencyInjector();
     $di->addDependency('Coffee', new Dependency_Coffee());
     $di->addDependency('Cocoa', new Dependency_Cocoa());
     RedBean_ModelHelper::setDependencyInjector($di);
     $geek = R::dispense('geek');
     list($coffee, $cocoa) = $geek->getObjects();
     asrt($coffee instanceof Dependency_Coffee, TRUE);
     asrt($cocoa instanceof Dependency_Cocoa, TRUE);
     // Don't fail if not exists
     $di->addDependency('NonExistantObject', new Dependency_Coffee());
     $geek = R::dispense('geek');
     $geek = R::dispense('geek');
     list($coffee, $cocoa) = $geek->getObjects();
     asrt($coffee instanceof Dependency_Coffee, TRUE);
     asrt($cocoa instanceof Dependency_Cocoa, TRUE);
     // Can we go back to base scenario?
     RedBean_ModelHelper::clearDependencyInjector();
     $geek = R::dispense('geek');
     list($coffee, $cocoa) = $geek->getObjects();
     asrt($coffee instanceof Dependency_Coffee, FALSE);
     asrt($cocoa instanceof Dependency_Cocoa, FALSE);
 }
Example #3
0
 /**
  * Obtains a new instance of $modelClassName, using a dependency injection
  * container if possible.
  *
  * @param string $modelClassName name of the model
  *
  * @return object
  */
 public static function factory($modelClassName)
 {
     if (self::$dependencyInjector) {
         return self::$dependencyInjector->getInstance($modelClassName);
     }
     return new $modelClassName();
 }