2016-01-12 59 views
6

在疙瘩1.0我曾經是能夠分享類的實例是這樣的:疙瘩DI分享折舊。怎麼辦?

$app['some_service'] = $app->share(function() { 
    return new Service(); 
}); 

現在,這似乎是過時,我無法找到是什麼這樣做的新途徑。

+1

看起來像http://pimple.sensiolabs.org/上記錄的容器系統 – ceejayoz

回答

11

在疙瘩1.0(捷希凱1),這樣做:

$app['shared_service'] = $app->share(function() { 
    return new Service(); 
}); 

$app['non_shared_service'] = function() { 
    return new Service(); 
}; 

在疙瘩3.0(捷希凱2)執行此操作(這是相對!):

$app['shared_service'] = function() { 
    return new Service(); 
}; 

$app['non_shared_service'] = $app->factory(function() { 
    return new Service(); 
}); 
1

默認情況下,疙瘩3.0(Silex 2.0使用的)默認情況下始終返回服務的相同實例。如果你不想要這種行爲,你需要明確說明並使用工廠函數。

1

所依賴的疙瘩版!

在疙瘩1.0

$container['shared'] = $container->shared(function(){ 
    return new Class(); 
}); 
$container['non_shared'] = function() { 
    return new Class(); 
}; 

在疙瘩3.0

$container['shared'] = function() { 
    return new Class(); 
}; 
$container['non_shared'] = $container->factory(function() { 
    return new Class(); 
}); 

記憶,當你創建一個共享服務,他們回來也不會改變什麼。當您創建非共享服務時,每次使用時,Pimple都會爲您提供一個新的服務實例。