Inject dependencies within factories: Container globals
Edit on GitHubThe ContainerInterface
provides a way to make dependencies globally available. Every dependency added to ContainerInterface
, that is, marked as isGlobal
, is available by using getProvidedDependency()
in your factory.
To add something globally you need to add the dependency to the ContainerInterface
and mark it as global.
<?php
namespace ProjectName\Application\Bundle\ApplicationPlugin;
use \Spryker\Shared\ApplicationExtension\Dependency\Plugin\ApplicationPluginInterface;
class YourApplicationPlugin implements ApplicationPluginInterface
{
/**
* {@inheritDoc}
* - Adds global service.
*
* @api
*
* @param \Spryker\Service\Container\ContainerInterface $container
*
* @return \Spryker\Service\Container\ContainerInterface
*/
public function provide(ContainerInterface $container): ContainerInterface
{
$container->set('Your service name', function () {
return new YourService();
});
$container->configure('Your service name', ['isGlobal' => true]);
}
...
}
To access this global dependency, inside your factory, call $this->getProvidedDependency('Your service name')
. With this approach, you can define such dependencies once instead of defining them each time for each module that uses them.
Thank you!
For submitting the form