Make the bootstrap context return ContainerInterface instances

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
Christoph Wurst 2020-07-16 17:06:17 +02:00 committed by Morris Jobke
parent 9a7a8b6e38
commit e029055e76
No known key found for this signature in database
GPG Key ID: FE03C3A163FEDE68
4 changed files with 16 additions and 15 deletions

View File

@ -26,24 +26,24 @@ declare(strict_types=1);
namespace OC\AppFramework\Bootstrap;
use OCP\AppFramework\Bootstrap\IBootContext;
use OCP\AppFramework\IAppContainer;
use OCP\IServerContainer;
use Psr\Container\ContainerInterface;
class BootContext implements IBootContext {
/** @var IAppContainer */
/** @var ContainerInterface */
private $appContainer;
public function __construct(IAppContainer $appContainer) {
public function __construct(ContainerInterface $appContainer) {
$this->appContainer = $appContainer;
}
public function getAppContainer(): IAppContainer {
public function getAppContainer(): ContainerInterface {
return $this->appContainer;
}
public function getServerContainer(): IServerContainer {
return $this->appContainer->getServer();
public function getServerContainer(): ContainerInterface {
return $this->appContainer->get(IServerContainer::class);
}
public function injectFn(callable $fn) {

View File

@ -27,17 +27,17 @@ namespace OC\AppFramework\Bootstrap;
use Closure;
use OCP\AppFramework\QueryException;
use OCP\IContainer;
use Psr\Container\ContainerInterface;
use ReflectionFunction;
use ReflectionParameter;
use function array_map;
class FunctionInjector {
/** @var IContainer */
/** @var ContainerInterface */
private $container;
public function __construct(IContainer $container) {
public function __construct(ContainerInterface $container) {
$this->container = $container;
}
@ -47,14 +47,14 @@ class FunctionInjector {
// First we try by type (more likely these days)
if (($type = $param->getType()) !== null) {
try {
return $this->container->query($type->getName());
return $this->container->get($type->getName());
} catch (QueryException $ex) {
// Ignore and try name as well
}
}
// Second we try by name (mostly for primitives)
try {
return $this->container->query($param->getName());
return $this->container->get($param->getName());
} catch (QueryException $ex) {
// As a last resort we pass `null` if allowed
if ($type !== null && $type->allowsNull()) {

View File

@ -120,6 +120,7 @@ class App {
/**
* @return IAppContainer
* @since 6.0.0
* @todo make this return a ContainerInterface as well
*/
public function getContainer(): IAppContainer {
return $this->container;

View File

@ -41,20 +41,20 @@ interface IBootContext {
*
* Useful to register and query app-specific services
*
* @return IAppContainer|ContainerInterface
* @return ContainerInterface|IAppContainer
* @since 20.0.0
*/
public function getAppContainer(): IAppContainer;
public function getAppContainer(): ContainerInterface;
/**
* Get hold of the server DI container
*
* Useful to register and query system-wide services
*
* @return IServerContainer
* @return ContainerInterface|IServerContainer
* @since 20.0.0
*/
public function getServerContainer(): IServerContainer;
public function getServerContainer(): ContainerInterface;
/**
* Invoke the given callable and inject all parameters based on their types