ericsnguyen/simple-di

一个简单的依赖注入库

v1.0.4 2020-10-19 04:40 UTC

This package is auto-updated.

Last update: 2024-09-19 14:31:52 UTC


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