// TODO use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
+/**
+ * Class Container
+ * @package Civi\Core
+ */
class Container {
const SELF = 'civi_container_factory';
private static $singleton;
/**
+ * @param bool $reset whether to forcibly rebuild the entire container
* @return \Symfony\Component\DependencyInjection\TaggedContainerInterface
*/
- public static function singleton() {
- if (self::$singleton === NULL) {
+ public static function singleton($reset = FALSE) {
+ if ($reset || self::$singleton === NULL) {
$c = new self();
self::$singleton = $c->createContainer();
}
/**
* @var ContainerBuilder
+ * @return \Symfony\Component\DependencyInjection\ContainerBuilder
*/
public function createContainer() {
$civicrm_base_path = dirname(dirname(__DIR__));
/**
* @param \Symfony\Component\EventDispatcher\EventDispatcher $dispatcher
+ * @param $magicFunctionProvider
+ *
* @return \Civi\API\Kernel
*/
public function createApiKernel($dispatcher, $magicFunctionProvider) {
+ $dispatcher->addSubscriber(new \Civi\API\Subscriber\ChainSubscriber());
$dispatcher->addSubscriber(new \Civi\API\Subscriber\TransactionSubscriber());
$dispatcher->addSubscriber(new \Civi\API\Subscriber\I18nSubscriber());
$dispatcher->addSubscriber($magicFunctionProvider);
\CRM_Utils_API_MatchOption::singleton(),
)));
$dispatcher->addSubscriber(new \Civi\API\Subscriber\XDebugSubscriber());
- $kernel = new \Civi\API\Kernel($dispatcher, array());
+ $kernel = new \Civi\API\Kernel($dispatcher);
+
+ $reflectionProvider = new \Civi\API\Provider\ReflectionProvider($kernel);
+ $dispatcher->addSubscriber($reflectionProvider);
+
+ $kernel->setApiProviders(array(
+ $reflectionProvider,
+ $magicFunctionProvider,
+ ));
+
return $kernel;
}
}