@ -169,6 +169,9 @@ $container->set('yii\mail\MailInterface', 'yii\swiftmailer\Mailer');
// to create an instance of Connection
$container->set('foo', 'yii\db\Connection');
// register an alias with `Instance::of`
$container->set('bar', Instance::of('foo'));
// register a class with configuration. The configuration
// will be applied when the class is instantiated by get()
$container->set('yii\db\Connection', [
@ -179,7 +182,7 @@ $container->set('yii\db\Connection', [
]);
// register an alias name with class configuration
// In this case, a "class" element is required to specify the class
// In this case, a "class" or "__class" element is required to specify the class
$container->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
@ -188,11 +191,12 @@ $container->set('db', [
'charset' => 'utf8',
]);
// register a PHP callable
// register callable closure or array
// The callable will be executed each time when $container->get('db') is called
$container->set('db', function ($container, $params, $config) {
return new \yii\db\Connection($config);
});
$container->set('db', ['app\db\DbFactory', 'create']);
// register a component instance
// $container->get('pageCache') will return the same instance each time it is called
@ -215,7 +219,6 @@ $container->setSingleton('yii\db\Connection', [
]);
```
Resolving Dependencies < span id = "resolving-dependencies" > < / span >
----------------------
@ -440,28 +443,23 @@ we shall copy-paste the line that creates `FileStorage` object, that is not the
As described in the [Resolving Dependencies ](#resolving-dependencies ) subsection, [[yii\di\Container::set()|set()]]
and [[yii\di\Container::setSingleton()|setSingleton()]] can optionally take dependency's constructor parameters as
a third argument. To set the constructor parameters, you may use the following configuration array format:
- `key` : class name, interface name or alias name. The key will be passed to the
[[yii\di\Container::set()|set()]] method as a first argument `$class` .
- `value` : array of two elements. The first element will be passed to the [[yii\di\Container::set()|set()]] method as the
second argument `$definition` , the second one — as `$params` .
a third argument. To set the constructor parameters, you may use the `__construct()` option:
Let's modify our example:
```php
$container->setDefinitions([
'tempFileStorage' => [ // we've created an alias for convenience
[ 'class' => 'app\storage\FileStorage'] ,
['/var/tempfiles'] // could be extracted from some config files
'class' => 'app\storage\FileStorage',
'__construct()' => ['/var/tempfiles'], // could be extracted from some config files
],
'app\storage\DocumentsReader' => [
[ 'class' => 'app\storage\DocumentsReader'] ,
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsReader',
'__construct()' => [Instance::of('tempFileStorage')],
],
'app\storage\DocumentsWriter' => [
[ 'class' => 'app\storage\DocumentsWriter'] ,
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsWriter',
'__construct()' => [Instance::of('tempFileStorage')]
]
]);
@ -488,19 +486,19 @@ create its instance once and use it multiple times.
```php
$container->setSingletons([
'tempFileStorage' => [
[ 'class' => 'app\storage\FileStorage'] ,
['/var/tempfiles']
'class' => 'app\storage\FileStorage',
'__construct()' => ['/var/tempfiles']
],
]);
$container->setDefinitions([
'app\storage\DocumentsReader' => [
[ 'class' => 'app\storage\DocumentsReader'] ,
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsReader',
'__construct()' => [Instance::of('tempFileStorage')],
],
'app\storage\DocumentsWriter' => [
[ 'class' => 'app\storage\DocumentsWriter'] ,
[Instance::of('tempFileStorage')]
'class' => 'app\storage\DocumentsWriter',
'__construct()' => [Instance::of('tempFileStorage')],
]
]);