2016-01-12 2 views
6

In Pimple 1.0 Früher kann ich seine Klasseninstanzen wie diese teilen:Pimple DI-Aktie abgeschrieben. Was jetzt?

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

Das jetzt veraltet zu sein scheint, und ich bin nicht in der Lage zu finden, was die neue Art und Weise ist, dies zu tun.

+1

Sieht aus wie das Container-System dokumentiert unter http://pimple.sensiolabs.org/ – ceejayoz

Antwort

11

In Pimple 1,0 (Silex 1), tun Sie dies:

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

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

In Pimple 3.0 (Silex 2) Sie tun dies (das ist das Gegenteil!):

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

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

Scheint, dass von Pimple 3.0 (die Silex 2.0 verwendet) standardmäßig immer dieselbe Instanz des Dienstes zurückgibt. Sie müssen explizit darüber sein und die Factory-Funktion verwenden, wenn Sie dieses Verhalten nicht möchten.

1

Hängt von die Pickel-Version!

Auf Pimple 1,0

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

Auf Pimple 3,0

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

Remembering, wenn Sie einen Shared-Service erstellen, was sie zurückkehren wird sich nicht ändern. Wenn Sie einen nicht gemeinsam genutzten Dienst erstellen, stellt der Pimple bei jeder Verwendung eine neue Instanz des Dienstes bereit.

Verwandte Themen