https://github.com/esase/tiny-service-manager
The Service Manager is a service/object locator, tasked with retrieving other objects.
https://github.com/esase/tiny-service-manager
container di esase framework lightweight microservices psr servicelocator servicemanager tinyframework
Last synced: 3 months ago
JSON representation
The Service Manager is a service/object locator, tasked with retrieving other objects.
- Host: GitHub
- URL: https://github.com/esase/tiny-service-manager
- Owner: esase
- License: mit
- Created: 2020-08-06T05:35:12.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-11-07T09:11:52.000Z (over 5 years ago)
- Last Synced: 2026-01-11T14:55:57.675Z (3 months ago)
- Topics: container, di, esase, framework, lightweight, microservices, psr, servicelocator, servicemanager, tinyframework
- Language: PHP
- Homepage:
- Size: 35.2 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# tiny-service-manager
[](https://travis-ci.com/github/esase/tiny-service-manager/builds)
[](https://coveralls.io/github/esase/tiny-service-manager?branch=master)
**Tiny/Service Manager** - it's a very simple realization of [DI](https://en.wikipedia.org/wiki/Dependency_injection) (dependency injection)
container with a clean and understandable Api.
(There are no any extra dependencies and it's very small).
`DI containers` are essential part of any modern `framework` or `CMS`.
Differently speaking it's the one of the most important part in web applications,
which stores and produces any kind of services for you (`controllers`, `services`, `utilities`, etc).
Furthermore it follows to a one of the [SOLID](https://en.wikipedia.org/wiki/SOLID). principle (dependency injection or dependency inversion).
Which stands for - you should not create objects directly in other objects, because of some
difficulties in unit testing and maintaining of embedded classes.
Lets check a look a couple of examples:
**a wrong way:**
```php
embedded = new B();
}
}
```
**the best way** - is to inject any dependencies in `constructor` or `setters` (if dependencies are optional).
```php
embedded = $embedded;
}
}
```
**service manager** in action
```php
use Tiny\ServiceManager\ServiceManager;
// The Service Manager is a service/object locator, tasked with retrieving other objects.
$serviceManager = new ServiceManager([
B::class => function(ServiceManager $serviceManager) {
return new B();
},
A::class => function(ServiceManager $serviceManager) {
return new A($serviceManager->get(B::class));
}
]);
// now whenever we get an instance of "A" class we get it with injected instance of "B" class
$serviceA = $serviceManager->get(A::class);
```
now we can easily test the `A` class injecting a mocked version of the `B`
```php
$serviceA = new A(new MockedB());
```
For more details please check a look the documentation link below.
## Installation
Run the following to install this library:
```bash
$ composer require esase/tiny-service-manager
```
## Documentation
https://tiny-docs.readthedocs.io/en/latest/tiny-service-manager/docs/index.html