Let container create pipeline object

This commit is contained in:
huangzhhui 2018-12-28 18:19:07 +08:00
parent 9779ef020f
commit 194a46778c
3 changed files with 10 additions and 12 deletions

View File

@ -57,7 +57,12 @@ trait ProxyTrait
{ {
$arround = AspectCollector::get('arround'); $arround = AspectCollector::get('arround');
if ($aspects = self::isMatchClassName($arround['classes'] ?? [], $proceedingJoinPoint->className, $proceedingJoinPoint->method)) { if ($aspects = self::isMatchClassName($arround['classes'] ?? [], $proceedingJoinPoint->className, $proceedingJoinPoint->method)) {
$pipeline = new Pipeline(ApplicationContext::getContainer()); $container = ApplicationContext::getContainer();
if (method_exists($container, 'make')) {
$pipeline = $container->make(Pipeline::class);
} else {
$pipeline = new Pipeline($container);
}
return $pipeline->via('process')->through($aspects)->send($proceedingJoinPoint)->then(function (ProceedingJoinPoint $proceedingJoinPoint) { return $pipeline->via('process')->through($aspects)->send($proceedingJoinPoint)->then(function (ProceedingJoinPoint $proceedingJoinPoint) {
return $proceedingJoinPoint->processOriginalMethod(); return $proceedingJoinPoint->processOriginalMethod();
}); });

View File

@ -13,7 +13,6 @@ namespace Hyperf\Di;
use DI\FactoryInterface; use DI\FactoryInterface;
use Hyperf\Di\Definition\DefinitionInterface; use Hyperf\Di\Definition\DefinitionInterface;
use Hyperf\Di\Exception\DependencyException;
use Hyperf\Di\Exception\NotFoundException; use Hyperf\Di\Exception\NotFoundException;
use Hyperf\Di\Resolver\ResolverDispatcher; use Hyperf\Di\Resolver\ResolverDispatcher;
use Hyperf\Dispatcher\Exceptions\InvalidArgumentException; use Hyperf\Dispatcher\Exceptions\InvalidArgumentException;
@ -84,7 +83,6 @@ class Container implements ContainerInterface
* to specific values. Parameters not defined in this array will be resolved using * to specific values. Parameters not defined in this array will be resolved using
* the container. * the container.
* @throws InvalidArgumentException The name parameter must be of type string. * @throws InvalidArgumentException The name parameter must be of type string.
* @throws DependencyException Error while resolving the entry.
* @throws NotFoundException No entry found for the given name. * @throws NotFoundException No entry found for the given name.
* @return mixed * @return mixed
*/ */
@ -101,7 +99,7 @@ class Container implements ContainerInterface
throw new NotFoundException("No entry or class found for '$name'"); throw new NotFoundException("No entry or class found for '$name'");
} }
return $this->resolveDefinition($name, $definition, $parameters); return $this->resolveDefinition($definition, $parameters);
} }
/** /**
@ -110,7 +108,6 @@ class Container implements ContainerInterface
* @param string $name Identifier of the entry to look for. * @param string $name Identifier of the entry to look for.
* @throws NotFoundExceptionInterface No entry was found for **this** identifier. * @throws NotFoundExceptionInterface No entry was found for **this** identifier.
* @throws ContainerExceptionInterface Error while retrieving the entry. * @throws ContainerExceptionInterface Error while retrieving the entry.
* @throws DependencyException Error while resolving the entry.
* @return mixed Entry. * @return mixed Entry.
*/ */
public function get($name) public function get($name)
@ -153,8 +150,6 @@ class Container implements ContainerInterface
/** /**
* Init defined dependencies, not include dynamic definition. * Init defined dependencies, not include dynamic definition.
*
* @throws DependencyException Error while resolving the entry.
*/ */
public function initDependencies(): void public function initDependencies(): void
{ {
@ -172,7 +167,7 @@ class Container implements ContainerInterface
} }
$this->fetchedDefinitions = []; // Completely clear this local cache $this->fetchedDefinitions = []; // Completely clear this local cache
$this->definitionSource->addDefinition($definition); $this->definitionSource->addDefinition($name, $definition);
} }
private function getDefinition(string $name) private function getDefinition(string $name)
@ -187,12 +182,10 @@ class Container implements ContainerInterface
/** /**
* Resolves a definition. * Resolves a definition.
* Checks for circular dependencies while resolving the definition.
* *
* @throws DependencyException Error while resolving the entry.
* @return mixed * @return mixed
*/ */
private function resolveDefinition(string $entryName, DefinitionInterface $definition, array $parameters = []) private function resolveDefinition(DefinitionInterface $definition, array $parameters = [])
{ {
return $this->definitionResolver->resolve($definition, $parameters); return $this->definitionResolver->resolve($definition, $parameters);
} }

View File

@ -48,7 +48,7 @@ class Pipeline
*/ */
protected $method = 'handle'; protected $method = 'handle';
public function __construct(ContainerInterface $container = null) public function __construct(ContainerInterface $container)
{ {
$this->container = $container; $this->container = $container;
} }