marcelomx / micro-container
一个轻量级的PHP依赖注入容器
Requires
- psr/container: ^2.0
Requires (Dev)
- phpunit/phpunit: ^9.5
Provides
- psr/container-implementation: 1.1|2.0
This package is auto-updated.
Last update: 2024-09-17 13:07:21 UTC
README
Micro Container是一个轻量级的PHP依赖注入容器,旨在简化您PHP应用程序中依赖项的管理。使用Micro Container,您可以使用简洁直观的语法轻松定义和解决依赖项。
安装
要安装Micro Container,请使用Composer
composer require marcelomx/micro-container
用法
基本设置
首先创建一个ServiceContainer
类的实例,并为其提供一个包含依赖定义的数组
use MicroContainer\ServiceContainer; $container = new ServiceContainer([ Foo::class => fn() => new Foo('foo', new \stdClass), Bar::class => Bar::class, 'foo.alias' => Foo::class, FooInterface::class => Foo::class ]);
以下是定义的分解
-
可调用工厂(
Foo::class
):使用可调用工厂函数定义Foo
类的实例化,允许自定义初始化。 -
类字符串自动注入(
Bar::class
):展示Bar
类的类字符串自动注入解决方法,Micro Container自动解决依赖。 -
服务别名(
'foo.alias'
):创建Foo
类的别名,以展示容器中服务别名的使用。 -
接口解析(
FooInterface::class
):解析接口(FooInterface
)到其实例(Foo
)。
检索服务
一旦容器设置完毕,您可以轻松检索已定义服务的实例
$foo = $container->get(Foo::class); assert($foo instanceof Foo); $aliasFoo = $container->get('foo.alias'); assert($aliasFoo === $foo); $bar = $container->get(Bar::class); assert($bar instanceof Bar); assert($bar->foo === $foo); $service = $container->get(FooInterface::class); assert($service instanceof FooInterface); assert($service === $foo);
自动注入
Micro Container支持非定义服务的自动注入。以下示例中,Baz
类是在容器中未显式定义的情况下创建的
$baz = $container->get(Baz::class); assert($baz instanceof Baz); assert($baz->bar === $bar);
这展示了Micro Container自动解决依赖的能力,使其方便地处理未在容器中显式定义的类。
此外,您可以使用Autowired属性自动将依赖注入到您的类属性中
use MicroContainer\Attributes\Autowired; class MyClass { #[Autowired()] private FooInterface $foo; #[Autowired(service: Bar::class)] private $bar; }
在此示例中,Autowired属性被用于指示$foo属性应自动注入FooInterface的一个实例,而$bar属性应注入Bar类的一个实例。这为在类中表达依赖提供了一个简洁的声明性方法,提高了可读性并减少了样板代码。
请随意自定义和扩展此基本设置以满足您项目的特定要求。
版权
Micro Container是开源软件,在MIT许可下发布。
贡献
我们欢迎贡献!要为Micro Container做出贡献,请遵循我们的贡献指南。您的帮助非常受欢迎。