Service Container for browser an node
npm install nodic0-dependency Service Container for browser an node
service is an object contains following properties:
- name - service name
- classOf - service class
- factory - service factory function
- args - array of service constructor or factory arguments
- tags - service tags (array of strings)
- shared - is the service shared or every time should be instantiated
- instance - instance of service target
---
```
class DI {
has(name)
get(name, args)
set(name, instance, options) {
injectService(target, serviceName)
register(name, options)
find(callback)
findFirst(callback)
resolveService(service, args)
resolveArg(arg)
services
}
createService(name, options) - creates service from provided arguments` javascript`
var service = DI.createService('myService', {classOf: Array, args: [[1,2,3,4,5]], tags: ['array']});injectService(target, serviceName) - proxify target properties starts from $ sign to service getter``
var target = {$myService: null};
DI.injectService(target, 'myService');
console.log(target.$myService); // [1,2,3,4,5]has (name) - returns true if service existsregister (name, options) - register new service with name and optionsset (name, instance, options) - set service with name name provided instance and optionsget (name, args) - returns service instance by name if service does not exists create with arguments argsfind(callback) - returns all services where callback returns truefindFirst (callback) - return first service on callback returns trueresolveService(service, args) - resolves service service with arguments args and returns instanceresolveArg (arg) - returns service instance with name arg or argservices - list of services names
javascript
import createService, { DI } from 'nodic';const di = new DI();
const serviceDate = createService('date', { factory: () => new Date(), tags: ['date'] });
const serviceCurDate = createService('currentDate', { factory: () => new Date(), shared: false, tags: ['date'] });
di.register(serviceDate);
di.register(serviceCurDate);
console.log(di.get('date') === di.get('date')); // true
console.log(di.get('currentDate') === di.get('currentDate')); // false
``