oliviermadre / dic-it
dev-master
2013-11-01 00:00 UTC
Requires
- symfony/yaml: 2.5.x-dev
Requires (Dev)
- guzzle/guzzle: ~3.8
- league/phpunit-coverage-listener: ~1.0
- ocramius/proxy-manager: 0.5.*
- phpunit/phpunit: ~3.7
- squizlabs/php_codesniffer: ~1.5
- zendframework/zend-json: ~2.2
- zendframework/zend-soap: ~2.2
- zendframework/zend-xmlrpc: ~2.2
Suggests
- guzzle/guzzle: To support RESTful remote object activation
- ocramius/proxy-manager: To support injection of runtime generated proxies
- zendframework/zend-json: To support JSON-RPC remote object activation
- zendframework/zend-soap: To support SOAP remote object activation
- zendframework/zend-xmlrpc: To support XML-RPC remote object activation
This package is auto-updated.
Last update: 2022-02-01 12:28:06 UTC
README
DIC-IT是一个简单的依赖注入容器,具有可扩展的激活和注入策略。
设置
推荐的做法是在你的仓库根目录下创建一个config文件夹。所有配置均基于YAML文件。
示例YAML文件
parameters:
MyParameter: 'Some parameter value'
MyOtherParameter: 42
MyParameters:
nested_level:
foo : foo
bar : bar
baz : foobar
classes:
MyServiceName:
class: \Fully\Qualified\ClassName
arguments: [ @MyDependency, %MyParameter, %MyParameters.nested_level, 'Hard-coded value', $container, $env.ENV, $const.ROOT_PATH ]
MyDependency:
class: \Fully\Qualified\DependencyClassName
props:
MyProperty: %MyOtherParameter
引用
您可以在类定义中注入不同类型的引用。您可以获取其他服务实例、参数、容器本身、环境变量和全局常量值。
- @ServiceName : 获取该定义的实例
- %param : 获取容器中定义的参数
- $container : 获取容器本身
- $env.ENV_NAME : 获取环境变量
- $const.CONST_NAME : 获取全局定义的常量值
使用include
可以将配置拆分为多个文件,以便于管理依赖
includes:
- relative/file.yml
- relative/another-file.yml
classes:
...
这允许您将参数与服务定义分开,例如。
默认对象生命周期
默认情况下,所有对象都是创建为非单例对象(这肯定会改变),因此每次容器解析引用时,都会创建请求对象的新实例。
管理循环依赖
默认情况下,由于默认对象生命周期,循环依赖处理得不好(堆栈溢出...)。要为特定对象启用循环依赖,至少有两个对象中的一个必须定义为单例。但这不会产生预期结果,因此强烈建议将循环依赖中的两个对象都定义为单例。