jbuncle / simple-dic
Simple Dependency Injection container,专注于自动注入。
Requires
- php: >=7.1
- psr/container: ^2.0
Requires (Dev)
- jbuncle/php-standards: @stable
- phpunit/php-code-coverage: ^7.0
- phpunit/phpunit: ^8.2
This package is auto-updated.
Last update: 2024-09-16 07:13:36 UTC
README
一个简单的依赖注入容器,侧重于自动连接(自动连接)依赖。
介绍
Simple DIC 在自动连接方面进行了实现。
这意味着,如果一个类可以通过递归解析依赖关系自动创建,那么你将得到一个类,即使你没有手动将其放入容器中!
为了完全自动地实现这一点,所有类构造函数的参数都需要对可实例化的类型有明确的类型提示(即它们必须是非抽象的、非接口的、非原生的)。
如果所需的类型使用接口和/或抽象类,则可以使用 addTypeMapping
方法定义类型映射,以告诉容器将类型解析为哪些具体类。
如果所需的类型依赖于原生类型(例如,构造函数需要字符串),则可以定义用于手动创建实例的工厂方法。您的工厂方法可以定义也将自动注入的参数。
我已经尽可能地优化了这个实现。
示例
在下面的示例中,我们可以通过向容器请求一个实例来获取 Foo
类的实例,不需要对容器进行任何设置,除了实例化它。
class Baz { public __construct(); } class Bar { public __construct(Baz baz); } class Foo { public __construct(Bar bar); } $container = new \JBuncle\SimpleDic\Container(); $fooInstance = $container->getInstance(Foo::class);
这将自动实例化 Foo
、Bar
和 Baz
的实例,并将这些实例自动存储在容器中。因此,随后调用 $container->getInstance(Bar::class)
将给出与创建 Foo
时相同的类实例。
添加工厂函数
工厂函数允许您定义在需要时用于手动创建实例的回调(懒加载)。
对于无法使用完整自动自动连接的实例非常有用。
类型映射
类型映射允许您告诉容器在请求特定类型时使用哪种类型。
这对于您想要定义在需要超类型或接口时使用哪个具体或扩展类非常有用。
PSR 兼容性
可以使用 PsrAdapter
包装器类轻松地将简单的 DIC 转换为 PHP FIG PSR-11(psr/container
v2)兼容的实现。
$containerFactory = new \JBuncle\SimpleDic\ContainerFactory(); $container = $containerFactory->create(); /* @var $psrContainer \Psr\Container\ContainerInterface */ $psrContainer = new \JBuncle\SimpleDic\PsrAdapter($container);