Constants

CACHE_FILE

CACHE_FILE = BASE_PATH . '/storage/cache/container.php'

Properties

$container

$container : ?\Symfony\Component\DependencyInjection\ContainerInterface

Type

ContainerInterface

$providers

$providers : ?\Framework\Container\ContainerProviders

Type

ContainerProviders

Methods

init()

init(array  $parameters = []) : void

初始化容器.

Parameters

array $parameters

全局参数

Throws

\RuntimeException

make()

make(string  $abstract, array  $parameters = []) : object

1. 简单的 make 实现,用于模拟 Laravel/Webman 的构建行为.

Parameters

string $abstract

类名

array $parameters

构造函数参数 ['paramName' => value]

Returns

object —

singleton()

singleton(string  $id, callable  $factory) : void

2. 注册一个单例服务到容器.

Parameters

string $id

服务的唯一ID

callable $factory

一个闭包或可调用对象,用于创建服务实例

Throws

\RuntimeException

如果容器已编译或不是 ContainerBuilder 实例

bind()

bind(string  $abstract, string  $concrete, bool  $shared = false) : void

3. 绑定接口到实现(Bind Interface to Implementation) 将一个接口绑定到一个具体的实现类,容器会自动解析接口为对应的实现。

使用 setDefinition 注册接口,并指定其实现类。 可以选择是否为单例。

Parameters

string $abstract
string $concrete
bool $shared

factory()

factory(string  $id, callable  $factory, bool  $shared = false) : void

4. 绑定工厂函数(Bind Factory Function) 通过一个工厂函数来创建服务实例,适用于需要复杂初始化逻辑的场景。 实现思路 使用 setFactory 指定一个闭包或可调用对象作为工厂。 可以选择是否为单例。

Parameters

string $id
callable $factory
bool $shared

instance()

instance(string  $id, object  $instance) : void

5. 绑定实例(Bind Instance) 直接将一个已存在的对象实例注册到容器中,适用于预初始化的对象。 实现思路 使用 set 方法直接注册实例(Symfony 容器原生支持)。 注意:编译后的容器可能不支持 set 方法,因此需要在编译前调用。

Parameters

string $id
object $instance

parameter()

parameter(string  $name, mixed  $value) : void

6. 绑定参数(Bind Parameter) 注册一个参数(如配置值),供其他服务依赖注入时使用。 实现思路 使用 setParameter 方法注册参数。 参数可以是字符串、数组、数字等。

Parameters

string $name
mixed $value

tag()

tag(string  $id, string  $tag, array  $attributes = []) : void

7. 绑定带标签的服务(Bind Tagged Services) 为服务添加标签,方便批量获取同一类服务(如事件监听器、命令等)。 实现思路 在服务定义中添加标签。 通过 findTaggedServiceIds 方法获取所有带特定标签的服务。

Parameters

string $id
string $tag
array $attributes

lazy()

lazy(string  $id, string  $concrete, bool  $shared = true) : void

8. 绑定延迟服务(Bind Lazy Services) 延迟服务的初始化,直到第一次调用时才创建实例,适用于重量级服务。 实现思路 在服务定义中设置 setLazy(true)。 Symfony 容器会自动生成一个代理类,延迟实例化。

Parameters

string $id
string $concrete
bool $shared

setProviderManager()

setProviderManager(\Framework\Container\ContainerProviders  $p) : void

Parameters

\Framework\Container\ContainerProviders $p

getInstance()

getInstance() : self

获取 Container 实例.

Returns

self —

get()

get(string  $id, int  $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE) : ?object

Parameters

string $id
int $invalidBehavior

Returns

?object —

has()

has(string  $id) : bool

Parameters

string $id

Returns

bool —

set()

set(string  $id, ?object  $service) : void

Parameters

string $id
?object $service

initialized()

initialized(string  $id) : bool

Parameters

string $id

Returns

bool —

getServiceIds()

getServiceIds() : array

Returns

array —

setParameter()

setParameter(string  $name, mixed  $value) : void

6. 绑定参数(Bind Parameter) 注册一个参数(如配置值),供其他服务依赖注入时使用。 实现思路 使用 setParameter 方法注册参数。 参数可以是字符串、数组、数字等。

Parameters

string $name
mixed $value

hasParameter()

hasParameter(string  $name) : bool

Parameters

string $name

Returns

bool —

getParameter()

getParameter(string  $name) : array|bool|float|int|string|\UnitEnum|null

Parameters

string $name

Returns

array|bool|float|int|string|\UnitEnum|null —

getParameterBag()

getParameterBag() : \Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface

Returns

\Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface —

compile()

compile(bool  $resolveEnvPlaceholders = false) : void

Parameters

bool $resolveEnvPlaceholders

isCompiled()

isCompiled() : bool

Returns

bool —

getCompilerPassConfig()

getCompilerPassConfig() : \Symfony\Component\DependencyInjection\Compiler\PassConfig

Returns

\Symfony\Component\DependencyInjection\Compiler\PassConfig —

addCompilerPass()

addCompilerPass(\Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface  $pass, string  $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, int  $priority) : static

Parameters

\Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface $pass
string $type
int $priority

Returns

static —

getBuilder()

getBuilder() : \Symfony\Component\DependencyInjection\ContainerBuilder

内部助手:获取 ContainerBuilder,如果当前不是 Builder 则抛出异常 用于解决 IDE 警告和运行时逻辑错误

Returns

\Symfony\Component\DependencyInjection\ContainerBuilder —

getContainer()

getContainer() : \Symfony\Component\DependencyInjection\ContainerInterface

内部助手:获取安全的容器实例

Returns

\Symfony\Component\DependencyInjection\ContainerInterface —