mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
FIX: Injector may instantiate prototypes as if they're singletons (fixes #8567)
This commit is contained in:
parent
b9c29e7e8f
commit
746c0679ad
@ -866,7 +866,7 @@ class Injector {
|
||||
return $this->instantiate($spec, $name);
|
||||
}
|
||||
|
||||
return $this->instantiate($spec);
|
||||
return $this->instantiate($spec, null, 'prototype');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -29,6 +29,7 @@ class DataObjectTest extends SapphireTest {
|
||||
'DataObjectTest_Play',
|
||||
'DataObjectTest_Ploy',
|
||||
'DataObjectTest_Bogey',
|
||||
'DataObjectTest_Sortable',
|
||||
'ManyManyListTest_Product',
|
||||
'ManyManyListTest_Category',
|
||||
);
|
||||
@ -38,6 +39,13 @@ class DataObjectTest extends SapphireTest {
|
||||
*/
|
||||
public function testSingleton($inst, $defaultValue, $altDefaultValue)
|
||||
{
|
||||
// Calls to scaffold the test database may have cached service specs for DataObjects
|
||||
// with the incorrect 'type' set (singleton instead of prototype)
|
||||
Injector::nest();
|
||||
$reflectionProp = new ReflectionProperty('Injector', 'specs');
|
||||
$reflectionProp->setAccessible(true);
|
||||
$reflectionProp->setValue(Injector::inst(), array());
|
||||
|
||||
$inst = $inst();
|
||||
// Test that populateDefaults() isn't called on singletons
|
||||
// which can lead to SQL errors during build, and endless loops
|
||||
@ -52,6 +60,8 @@ class DataObjectTest extends SapphireTest {
|
||||
} else {
|
||||
$this->assertEmpty($inst->MyFieldWithAltDefault);
|
||||
}
|
||||
|
||||
Injector::unnest();
|
||||
}
|
||||
|
||||
public function provideSingletons()
|
||||
|
Loading…
Reference in New Issue
Block a user