2016-01-12 9 views
6

In Pimple 1.0 ho usato per essere in grado di condividere istanze di classe in questo modo:La condivisione DI del Pimple è ammortizzata. Ora cosa?

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

Questo sembra ora essere deprecato e sono in grado di trovare quello che è il nuovo modo di fare questo.

+1

Sembra il sistema Container documentato su http://pimple.sensiolabs.org/ – ceejayoz

risposta

11

In Pimple 1.0 (Silex 1), si esegue questa operazione:

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

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

In Pimple 3.0 (Silex 2) si esegue questa operazione (che è il contrario!):

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

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

Sembra che da brufolo 3.0 (che utilizza Silex 2.0) per impostazione predefinita restituisce sempre la stessa istanza del servizio. È necessario essere espliciti su di esso e utilizzare la funzione di fabbrica se non si desidera questo comportamento.

1

dipende la versione di Brufolo!

Su Pimple 1,0

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

Su Pimple 3,0

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

Ricordare, quando si crea un servizio condiviso, ciò che ritornano non cambierà. Quando crei un servizio non condiviso, ogni volta che lo usi, il Pimple ti fornirà una nuova istanza del servizio.

Problemi correlati