einenlum / dyc
一个非常简单的DIC,支持自动装配(尚未准备就绪用于生产)
v0.0.1
2019-12-16 12:07 UTC
Requires (Dev)
- haydenpierce/class-finder: ^0.4.0
- phpspec/phpspec: ^6.1
Suggests
- haydenpierce/class-finder: To get a list of FQCN to autoload
This package is auto-updated.
Last update: 2024-09-16 23:02:29 UTC
README
一个非常简单的DIC,支持自动装配。仅供娱乐。
使用
<?php require_once(__DIR__.'/vendor/autoload.php'); $dic = new \Dyc\Dic(); $dic->set(\Foo\Bar::class, function(\Dyc\Dic $dic) { return new \Foo\Bar($dic->get(\Bar\Baz::class)); }); $bar = $dic->get(\Foo\Bar::class);
自动装配
我们建议使用 haydenpierce/class-finder,以获取项目中所有完全限定名称(FQCN)的列表。
<?php require_once(__DIR__.'/vendor/autoload.php'); $dic = new \Dyc\Dic(); $classes = \HaydenPierce\ClassFinder\ClassFinder::getClassesInNamespace('Foo'); $dic->autowire($classes); $bar = $dic->get(\Foo\Bar::class);
如果某个服务需要一个接口或标量,您需要重写整个定义
<?php require_once(__DIR__.'/vendor/autoload.php'); $dic = new \Dyc\Dic(); $classes = \HaydenPierce\ClassFinder\ClassFinder::getClassesInNamespace('Foo'); $dic->autowire($classes); $dic->set(\Some\Scalar\Dependent\Service::class, function(\Dyc\Dic $dic) { return new \Some\Scalar\Dependent\Service($dic->get(\Foo\Bar::class), 'some api key'); }); $service = $dic->get(\Some\Scalar\Dependent\Service::class);