webino/instance-container

类实例容器的实现。

1.0.0 2019-06-22 17:12 UTC

This package is auto-updated.

Last update: 2024-08-29 05:12:34 UTC


README

实例容器实现。

Build Status Coverage Status Code Quality Latest Stable Version

推荐用法

实例容器应在工厂中使用以解决新的类实例依赖项。不建议直接将其注入到对象中。

设置

PHP from Packagist

composer require webino\instance-container

快速使用

获取相同的类实例

use Webino\InstanceContainer;

class TestInstance
{
}

$instances = new InstanceContainer;

$testInstance = $instances->get(TestInstance::class);

创建新的类实例

use Webino\InstanceContainer;

class TestInstance
{
    public function __construct(stdClass $dependency)
    {
    }
}

$instances = new InstanceContainer;

$testInstance = $instances->make(TestInstance::class, new stdClass);

通过工厂方法获取类实例

use Webino\InstanceContainer;
use Webino\CreateInstanceEventInterface;
use Webino\InstanceFactoryMethodInterface;

class TestInstance implements InstanceFactoryMethodInterface
{
    public static function create(CreateInstanceEventInterface $event)
    {
        $container = $event->getContainer();
        return new static($container->get(stdClass::class));
    }
    
    public function __construct(stdClass $dependency)
    {    
    }
}

$instances = new InstanceContainer;

$testInstance = $instances->get(TestInstance::class);

设置类实例

use Webino\InstanceContainer;

class TestInstance
{
}

$instances = new InstanceContainer;

$instances->set(TestInstance::class, new TestInstance);

取消设置类实例

use Webino\InstanceContainer;

class TestInstance
{
}

$instances = new InstanceContainer;

$instances->set(TestInstance::class, null);

绑定工厂类

use Webino\InstanceContainer;
use Webino\CreateInstanceEventInterface;

class TestInstanceFactory implements InstanceFactoryInterface
{
    public function createInstance(CreateInstanceEventInterface $event)
    {
        $container = $event->getContainer();
        return new TestInstance($container->get(stdClass::class));
    }
}

class TestInstance
{
    public function __construct(stdClass $dependency)
    {    
    }
}

$instances = new InstanceContainer;

$instances->bind(TestInstance::class, TestInstanceFactory::class);

$testInstance = $instances->get(TestInstance::class);

绑定回调工厂

use Webino\InstanceContainer;
use Webino\CreateInstanceEventInterface;

class TestInstance
{
    public function __construct(stdClass $dependency)
    {    
    }
}

$instances = new InstanceContainer;

$instances->bind(TestInstance::class, function (CreateInstanceEventInterface $event) {
    $container = $event->getContainer();
    return new TestInstance($container->get(stdClass::class));
});

$testInstance = $instances->get(TestInstance::class);

获取接口默认类实例

use Webino\InstanceContainer;

interface TestInstanceInterface
{
}

class TestInstance implements TestInstanceInterface
{
    public function __construct(stdClass $dependency)
    {    
    }
}

$instances = new InstanceContainer;

$testInstance = $instances->get(TestInstanceInterface::class);

将别名接口设置为类

use Webino\InstanceContainer;

interface TestAliasInterface
{
}

class TestInstance implements TestAliasInterface
{
    public function __construct(stdClass $dependency)
    {    
    }
}

$instances = new InstanceContainer;

$instances->alias(TestInstance::class, TestAliasInterface::class);

$testInstance = $instances->get(TestAliasInterface::class);

实例创建事件处理

use Webino\InstanceContainer;
use Webino\CreateInstanceEvent;

class TestInstance
{
    public $foo = false;
}

$instances = new InstanceContainer;

$instances->on(CreateInstanceEvent::class, function (CreateInstanceEvent $event) {
    $instance = $event->getInstance();
    $instance->foo = true;
});

$testInstance = $instances->get(TestAliasInterface::class);

API

InstanceContainer

  • bool has(string $id)
    如果容器可以为给定标识符返回实例,则返回 true,否则返回 false。

  • mixed get(string $id)
    通过其标识符返回容器的条目实例。

  • void set(string $id, mixed $instance)
    设置条目实例。

  • mixed make(string $id, array<int, mixed> ...$parameter)
    创建新实例。

  • void bind(string $id, mixed $binding)
    将提供者绑定到条目实例。

  • void alias(string $id, string $alias)
    为条目实例设置别名。

CreateInstanceEvent

  • InstanceContainerInterface getContainer()
    返回实例容器。

  • string getClass()
    返回实例类。

  • array getParameters()
    返回实例创建参数。

InstanceFactory

  • mixed createInstance(CreateInstanceEventInterface $event)
    创建新实例。

InstanceFactoryMethod

  • mixed static create(CreateInstanceEventInterface $event)
    创建新实例。

开发

Build Status Coverage Status Code Quality Latest Unstable Version

静态分析

composer analyse

编码风格检查

composer check

编码风格修复

composer fix

测试

composer test

Git 预提交设置

ln -s ../../pre-commit .git/hooks/pre-commit

补充说明

License Total Downloads GitHub code size in bytes

请,如果您对这库感兴趣,请报告任何问题,并且不要犹豫贡献。我们将非常感谢对这库发展的任何贡献。

GitHub issues GitHub forks