hartmann/resolve-strategy-interface

resolve-strategies 允许您通过用户定义的过程解决依赖

1.1.0 2019-04-23 13:38 UTC

This package is auto-updated.

Last update: 2024-09-24 01:38:12 UTC


README

策略允许您通过用户定义的过程解决依赖。

例如,如果有多个请求类(如 CreateUserRequestDeletePostRequest 等)继承自 Request 并以相同的方式创建
(例如使用 ::createFromEnvironment 方法),您可以使用 ResolveStrategy 执行以下操作

use \Hartmann\ResolveStrategy\ResolveStrategyInterface

class ResolveRequestStrategy implements ResolveStrategyInterface
{
    /**
     * Checks wether the given class can be resolved by this strategy
     *
     * @param string $class The fully qualified namespace of the class to be resolved
     *
     * @return bool
     */
    public function suitable(string $class): bool
    {
        return method_exists($class, 'createFromEnvironment') && preg_match('/^.+?Request$/') === 1;
    }

    /**
     * A strategy allows you to resolve a dependency through a user-defined process.
     * For example, if a class is instantiated by a static method (e.g. ::createFromEnvironment), this can be resolved by a strategy.
     *
     * @param \Psr\Container\ContainerInterface $container The instance of the PSR-11 container
     * @param string                            $class     The fully qualified namespace of the class to be resolved
     *
     * @return object The instance of the requested class
     */
    public function resolve(\Psr\Container\ContainerInterface $container, string $class)
    {
        return call_user_func([$class, 'createFromEnvironment'], $container->get('environment'));
    }
}