theorx / sdic
简单的依赖注入容器
0.4.0
2016-12-16 18:30 UTC
Requires
- php: >=7
Requires (Dev)
- phpunit/phpunit: 5.2.*
This package is not auto-updated.
Last update: 2024-09-14 19:36:54 UTC
README
市面上有很多依赖注入容器,这个是最小化且直接的。没有第三方依赖。
作者
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