ericsnguyen / simple-di
一个简单的依赖注入库
v1.0.4
2020-10-19 04:40 UTC
Requires
- php: ^7.4
- doctrine/annotations: ^1.10
README
一个易于设置的依赖注入库,可以帮助您更快地在项目中设置依赖注入。
文档
第一步。
将您的类标记为 @Export()
以使 Simple DI 释放此类需要保留在容器中。在任何一个其他类中,如果您想通过属性注入,请将此属性标记为 @Import()
use SimpleDi\Annotations\Export; use SimpleDi\Annotations\Import; /** * @Export() */ class TrainingPlanController extends AbstractController { /** * @Import() * @var MessageFactory */ protected MessageFactory $mf; /** * @Import() * @var CourseService */ protected CourseService $courseService; }
我们对以 Controller 结尾的类进行了修改。它根本不需要标记为 @Export
。
第二步
我有一个小脚本,可以找到任何标记为 @Export
的类,并创建您自己的 $register
数组。因此,您不再需要手动创建了。站在您的项目根目录下,然后运行以下命令
- PROJECT = 根项目文件夹
- FILE = 存储注册映射的文件
PROJECT=application FILE=proxy/registry.php ./vendor/ericsnguyen/simple-di/bin/generate
它将打印一些错误,但请忽略它,运行后,请仔细检查。
第三步
在您的 index.php
或任何起始端点文件中,放置 SimpleDi
的配置
// you can put your `array` that act as your old DI container to it as param $container = new class implements \SimpleDi\Container\IContainer(){ // in my library we have SdContainer class that implements IContainer // but you can implement one if you want. }; $register = [ YourInterface::class=> YourImplementClass:class ]; SimpleDi::build([ // I have a variable $GLOBALS act as an instances holder for my container 'container'=>new SdContainer($GLOBALS), // an $register array. 'registry'=> include PROJECT_ROOT."/proxy/registry.php", // it is optional -> get any singleton existed in your project, but you can ignore it. 'root_class'=> Singleton::class ]);
并您在任何想获取此实例的地方
// at my routes table reader. $controller = App::resolver($controllerName);