https://github.com/matecat/simple-dic
A simple Dependency Injection Container (DIC).
https://github.com/matecat/simple-dic
container dependency-injection dependency-injection-container dic php
Last synced: 4 months ago
JSON representation
A simple Dependency Injection Container (DIC).
- Host: GitHub
- URL: https://github.com/matecat/simple-dic
- Owner: matecat
- License: mit
- Created: 2019-08-01T07:07:40.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-12-15T05:28:08.000Z (over 2 years ago)
- Last Synced: 2024-12-18T12:17:34.274Z (over 1 year ago)
- Topics: container, dependency-injection, dependency-injection-container, dic, php
- Language: PHP
- Homepage:
- Size: 3.21 MB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Simple DIC
[](https://www.codacy.com/app/mauretto78_2/simple-dic?utm_source=github.com&utm_medium=referral&utm_content=mauretto78/simple-dic&utm_campaign=Badge_Grade)
[]()
[]()
[](https://scrutinizer-ci.com/g/mauretto78/simple-dic/?branch=master)
**Simple DIC** is a simple Dependency Injection Container(DIC).
## Basic Usage
To init DIC you must provide a configuration file. Use `initFromFile` method:
Here is a sample (in YAML format):
```yaml
dummy-key: 'dummy-value'
dummy-array: [43243,2432,4324,445667]
three: 3
two: 2
acme:
class: Matecat\SimpleDIC\Dummy\Acme
acme-calculator:
class: Matecat\SimpleDIC\Dummy\AcmeCalculator
method: init
method_arguments: ['@three', '@two']
acme-parser:
class: Matecat\SimpleDIC\Dummy\AcmeParser
arguments: ['string']
acme-repo:
class: Matecat\SimpleDIC\Dummy\AcmeRepo
arguments: ['@acme']
```
After pass the name of dependency, you can specify:
* `class` : the full qualified class name
* `arguments`: an array of arguments to pass to instantiate the class from the constructor
* `method`: if you want to run a specific method of the class (method could be static or not not)
* `method_arguments`: an array of arguments to pass to instantiate the runned class method
If you want to pass an entry already present to other one, simply use the '@' symbol.
## Change Caching Directory
You cah use `setCacheDir` to setup yor cache directory. Do this **before** invoke `initFromFile` method:
```php
DIC::setCacheDir(__DIR__.'/../_cache_custom');
DIC::initFromFile(__DIR__ . '/../config/ini/redis.ini');
// ...
```
## Parameters
If you want to use a separate parameters file, you can use `DICParams` class. Take a look at the following example of params configuration file
(YAML format):
```yaml
your_secret_token: 'YOUR_SECRET_TOKEN'
your_secret_password: 'YOUR_SECRET_PASS'
```
You can setup `DICParams` class now:
```php
use Matecat\SimpleDIC\DICParams;
DICParams::initFromFile('your_params_file.yaml');
```
And then, you can use '%' synthax in your DIC configuration file. Please bear in mind that you MUST set parameters **before** instantiate DIC.
```yaml
client:
class: 'SimpleDIC\Dummy\Client'
arguments: ['%your_secret_token%', '%your_secret_password%']
```
## Environment Variable Support
To use your environment variable, simply follow the `%env(xxxx)%` synthax, consider this example:
```yaml
logger:
class: 'Matecat\SimpleDIC\Dummy\Logger'
arguments: ['%env(FOO)%']
```
## Retrieve an entry
In order to retrieve an entry use `get` method:
```php
use Matecat\SimpleDIC\DIC;
$dependency = DIC::get('key');
```
Please note that the method returns:
* `false` if the entry has a wrong configuration;
* `NULL` if the entry does not exists.
## Lazy loading and automatic caching
The entries are **lazy-loaded** when you invoke `get` or `has` method for the first time.
If you have apcu enabled on your system, DIC will automatically cache the entry in APCU store. Please note that the **id in cache always refers to the sha1() of the init file**.
## Commands
If you have an application which uses [Symfony Console](https://github.com/symfony/console), you have some commands available:
* ```dic:debug``` Dumps the entry list in the DIC.
You can register the commands in your app, consider this example:
```php
#!/usr/bin/env php
add(new \Matecat\SimpleDIC\Console\DICDebug($configFile));
$app->run();
```
## Support
If you found an issue or had an idea please refer [to this section](https://github.com/mauretto78/simple-dic/issues).
## Authors
* **Mauro Cassani** - [github](https://github.com/mauretto78)
## License
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details