一个非常简单的DIC,支持自动装配(尚未准备就绪用于生产)

v0.0.1 2019-12-16 12:07 UTC

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);