strident / container

易于使用和快速依赖注入容器组件,专为Trident构建。深受Pimple的启发。

2.0.0 2015-02-20 23:49 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:39:50 UTC


README

#Container 构建状态 覆盖率 代码气候

易于使用和快速依赖注入容器组件,专为Trident构建。深受Pimple的启发。

##安装

安装可通过Composer进行。将包添加到您的composer.json文件中

$ composer require strident/container ~2.0

##使用

容器实例化非常简单。只需做以下操作

use Strident\Container\Container;

$container = new Container();

###定义服务

从那里,您可以定义服务如下

// 'Service' class defined somewhere, and 'dependency_name' service defined

$container->set("service_name", function($container) {
    return new Service($container->get("dependency_name"));
});

服务是懒加载的(即,直到调用时才进行实例化)。

###在定义后扩展服务

您也可以在定义服务后扩展服务(例如,如果您希望增强服务、更改设置、更换依赖项等)。但请注意,一旦服务被使用,它就变为锁定状态,无法进一步修改。

$container->extend("service_name", function($service, $container) {
    $service->doSomething();
    $service->addSomething($container->get("dependency_name"));
    
    return $service;
});

###定义工厂服务

如果您希望每次返回服务的新实例而不是相同的实例,您可以定义一个工厂服务如下

$container->set("service_name", $container->factory(function($container) {
    return new Service($container->get("dependency_name"));
}));

###参数

通过像数组一样访问容器来获取/设置参数

// Set
$container["foo"] = "A parameter can be anything";

// Get
$foo = $container["foo"];