Skip to content
This repository
Browse code

RECOMMIT This is a recommit of a previously merged, but reverted, com…

…mit. The initial commit had problems when running "tests/all flush=all" when dev/build would re-analyse a bunch of stuff; fixes to address this went into #487, but for some reason the actual base changes didn't, so I'm re-submitting them in a separate pull.

BUGFIX Versioned's constructor doesn't provide suitable defaults. Previously a bug/feature in singleton, where it would pass null,true as params to strong_create, which would then get passed through as params to Versioned's constructor, meant that the code still executed fine (as was set to something that wasn't an array, so the null and true were instead taken as args). The fact that the usage of singleton(Versioned) never really used the classes code, purely for value lookup, meant that this never propagated errors. I've now switched singleton() to use the injector for retrieving values, which means these dud values are no longer passed through

CHANGE Given that Config::inst is an implementation of the singleton pattern itself, I've removed the extra call to singleton(). A side effect of this is that it gets around a possibly nasty circular reference with the dependency injector (which relies on the config object); in future, this dependency structure should really be structured from the DI directly.

MINOR Change singleton and strong_create to use dependency injector
  • Loading branch information...
commit ae7fc6f4d259bd79fb079ff9c9769fb08cea283f 1 parent 9898cd9
authored June 03, 2012
2  core/Config.php
@@ -118,7 +118,7 @@ static protected function type_mismatch() {
118 118
 	 * @return Config
119 119
 	 */
120 120
 	static public function inst() {
121  
-		if (!self::$instance) self::$instance = singleton('Config');
  121
+		if (!self::$instance) self::$instance = new Config();
122 122
 		return self::$instance;
123 123
 	}
124 124
 
4  core/Core.php
@@ -356,8 +356,6 @@ function getClassFile($className) {
356 356
  * way to access instance methods which don't rely on instance
357 357
  * data (e.g. the custom SilverStripe static handling).
358 358
  *
359  
- * @uses Object::strong_create()
360  
- *
361 359
  * @param string $className
362 360
  * @return Object
363 361
  */
@@ -367,7 +365,7 @@ function singleton($className) {
367 365
 	if(!is_string($className)) user_error("singleton() passed bad class_name: " . var_export($className,true), E_USER_ERROR);
368 366
 	if(!isset($_SINGLETONS[$className])) {
369 367
 		if(!class_exists($className)) user_error("Bad class to singleton() - $className", E_USER_ERROR);
370  
-		$_SINGLETONS[$className] = Object::strong_create($className,null, true);
  368
+		$_SINGLETONS[$className] = Injector::inst()->get($className);
371 369
 		if(!$_SINGLETONS[$className]) user_error("singleton() Unknown class '$className'", E_USER_ERROR);
372 370
 	}
373 371
 	return $_SINGLETONS[$className];
3  core/Object.php
@@ -234,8 +234,7 @@ public static function strong_create() {
234 234
 			$class = self::$strong_classes[$class];
235 235
 		}
236 236
 		
237  
-		$reflector = new ReflectionClass($class);
238  
-		return $reflector->newInstanceArgs($args);
  237
+		return Injector::inst()->createWithArgs($class, $args);
239 238
 	}
240 239
 	
241 240
 	/**
2  model/Versioned.php
@@ -92,7 +92,7 @@ static function reset() {
92 92
 	 * The first stage is consiedered the 'default' stage, the last stage is
93 93
 	 * considered the 'live' stage.
94 94
 	 */
95  
-	function __construct($stages) {
  95
+	function __construct($stages=array('Stage','Live')) {
96 96
 		parent::__construct();
97 97
 
98 98
 		if(!is_array($stages)) {

0 notes on commit ae7fc6f

Please sign in to comment.
Something went wrong with that request. Please try again.