theorx/sdic

简单的依赖注入容器

0.4.0 2016-12-16 18:30 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:36:54 UTC


README

市面上有很多依赖注入容器,这个是最小化且直接的。没有第三方依赖。

Build Status

作者

Lauri Orgla theorx@hotmail.com

文档

依赖注册用法

$container = new \Theorx\SDIC\SDIC();

//Register single dependency
$container->register(DependencyClassInterface::class, function(Theorx\SDIC\SDIC $container) {

    return new DependencyClass($container->get(DependencyClassDependency::class));
});

注册共享依赖(单例包装器)

$container->register(DependencyClassInterface::class, function(Theorx\SDIC\SDIC $container) {

    return $container->shared(DependencyClassInterface::class, function() {
        return new DependencyClass();
    });
});

注册依赖数组

$container->registerArray([
    DependencyAInterface::class => function(){
        return new DependencyA();
    },
    DependencyBInterface::class => function (){
        return new DependencyB();
    }
]);

您可以使用 has 方法检查容器是否包含名为的依赖

if($container->has(DependencyAInterface::class)){
    //has dependency
}

使用 get 方法从容器获取依赖

$instance = $container->get(DependencyBInterface::class);

容器扩展

容器扩展用于向容器添加依赖 容器扩展必须实现 SDICExtension 接口,该接口要求您实现一个定义依赖数组的方法

示例扩展

/**
 * Class ExampleExtension
 */
class ExampleExtension implements \Theorx\SDIC\Interfaces\SDICExtension {

    /**
     * @return array
     */
    public function registerDependencies() : array {

        return [
            DependencyDInterface::class => function() {

                return new DependencyD();
            },
            DependencyEInterface::class => function() {

                return new DependencyE();
            }
            //...
        ];
    }
}

加载容器扩展/扩展

方法 loadExtension 将扩展加载到容器中并注册新依赖

$container->loadExtension(new ExampleExtension);

要加载多个扩展,存在方法 loadExtensions,它接受实现 SDICExtension 接口的对象数组

SDIC API 概览


    /**
     * @author Lauri Orgla <theorx@hotmail.com>
     *
     *         Register name => callback,
     *         Callback example:
     *         function ($container) {
     *              return $container->shared(NAME, function($container){
     *                  return {{shared instance}};
     *              });
     *          }
     *
     *         This method is chainable, register()->register()->register()-> etc..
     *
     * @param string   $name
     * @param callable $callback
     *
     * @return SDIC
     */
     
  • register(string $name, callable $callback) : SDIC
    /**
     * Accepts array of dependencies. Example. [name => callback]
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     *
     * @param array $dependencies
     */
  • registerArray(array $dependencies)
    /**
     * Used for creating shared instances
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     *
     * @param string   $name
     * @param callable $callback
     *
     * @return mixed
     */
  • shared(string $name, callable $callback)
    /**
     * Fetches dependency by name
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     *
     * @param string $name
     *
     * @return mixed
     * @throws DependencyNotFoundException
     */
  • get(string $name)
    /**
     * Checks whether the container has given dependency
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     *
     * @param string $name
     *
     * @return bool
     */
  • has(string $name)
    /**
     * Gets shared instances
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     * @return array
     */
  • getInstances()
    /**
     * Gets current registry
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     * @return array
     */
  • getRegistry()
    /**
     * Load container extension which is instance of class that implements SDICExtension
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     *
     * @param SDICExtension $extension
     */
  • loadExtension(SDICExtension $extension)
    /**
     * Loads a set of extensions
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     *
     * @param array $extensions
     */
  • loadExtensions(array $extensions)
    /**
     * Gets list of loaded extensions
     *
     * @author Lauri Orgla <theorx@hotmail.com>
     * @return SDICExtension[]
     */
  • getLoadedExtensions() : array