Introduce Container Configurator

Container factory is now responsible only for building or loading cached container. Container configuration is done within the ContainerConfigurator
[PREMIUM-99]
This commit is contained in:
Rostislav Wolny
2018-12-04 14:42:44 +01:00
parent b5bc4b2609
commit 884cabb51f
5 changed files with 102 additions and 66 deletions

View File

@ -4,18 +4,11 @@ namespace MailPoet\DI;
use MailPoetVendor\Symfony\Component\DependencyInjection\ContainerBuilder;
use MailPoetVendor\Symfony\Component\DependencyInjection\Dumper\PhpDumper;
use MailPoetVendor\Symfony\Component\DependencyInjection\Reference;
class ContainerFactory {
/** @var ContainerBuilder */
private $container;
/** @var string */
private $dump_file = 'CachedContainer.php';
/** @var string */
private $dump_class = 'CachedContainer';
/** @var IContainerConfigurator */
private $configurator;
/** @var bool */
private $debug;
@ -24,66 +17,24 @@ class ContainerFactory {
* ContainerFactory constructor.
* @param bool $debug
*/
public function __construct($debug = false) {
public function __construct(IContainerConfigurator $configurator, $debug = false) {
$this->debug = $debug;
$this->configurator = $configurator;
}
function getContainer() {
if($this->container) {
return $this->container;
}
$dump_file = __DIR__ . '/' . $this->dump_file;
if(!$this->debug && file_exists($dump_file)) {
require_once $dump_file;
$this->container = new $this->dump_class();
$dump_class = '\\'. $this->configurator->getDumpNamespace() . '\\' . $this->configurator->getDumpClassname();
if(!$this->debug && class_exists($dump_class)) {
$container = new $dump_class();
} else {
$this->container = $this->createContainer();
$this->container->compile();
$container = $this->getConfiguredContainer();
$container->compile();
}
return $this->container;
return $container;
}
function createContainer() {
$container = new ContainerBuilder();
// API
$container->autowire(\MailPoet\API\MP\v1\API::class)->setPublic(true);
$container->register(\MailPoet\API\JSON\API::class)
->addArgument(new Reference('service_container'))
->setAutowired(true)
->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\AutomatedLatestContent::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\CustomFields::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Forms::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\ImportExport::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Mailer::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\MP2Migrator::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Newsletters::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\NewsletterTemplates::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Segments::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\SendingQueue::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Services::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Settings::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Setup::class)->setPublic(true);
$container->autowire(\MailPoet\API\JSON\v1\Subscribers::class)->setPublic(true);
// Config
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
// Cron
$container->autowire(\MailPoet\Cron\Daemon::class)->setPublic(true);
$container->autowire(\MailPoet\Cron\DaemonHttpRunner::class)->setPublic(true);
// Router
$container->autowire(\MailPoet\Router\Endpoints\CronDaemon::class)->setPublic(true);
$container->autowire(\MailPoet\Router\Endpoints\Subscription::class)->setPublic(true);
$container->autowire(\MailPoet\Router\Endpoints\Track::class)->setPublic(true);
$container->autowire(\MailPoet\Router\Endpoints\ViewInBrowser::class)->setPublic(true);
// Subscribers
$container->autowire(\MailPoet\Subscribers\NewSubscriberNotificationMailer::class)->setPublic(true);
$container->autowire(\MailPoet\Subscribers\ConfirmationEmailMailer::class)->setPublic(true);
$container->autowire(\MailPoet\Subscribers\RequiredCustomFieldValidator::class)->setPublic(true);
// Newsletter
$container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true);
return $container;
function getConfiguredContainer() {
return $this->configurator->configure(new ContainerBuilder());
}
function dumpContainer() {