dd-service-registry

0.1.2 • Public • Published

Service Registry

Installation

npm install dd-service-registry

# or when using Yarn

yarn add dd-service-registry 

Usage

The ServiceRegistry is exported as a singleton. But you can also use the exported class to create an own ServiceRegistry.

import registry from 'dd-service-registry';

You can define your own argument resolvers. It's highly recommended to set the DependencyResolver to get DI working. But you can also define your own argument/dependency resolver.

import DependencyResolver from 'dd-service-registry/argument-resolver/DependencyResolver';

registry.addArgumentResolver(new DependencyResolver());

Then you can start to register your services. Each service is represented by an service-configuration (see below).

registry.register('foo', Foo);
registry.register('bar', Bar, ['@foo']);
registry.register('baz', Baz, ['@foo', '@bar']);

After register your services you can start using them.

const foo = registry.get('foo');

Service configuration

registry.register(name: string, service: Class, args?: Array<any>, options?: Object)

args

Could be anything. Each arg is checked by all argument resolvers. For example: if you use the DependencyResolver you can resolve dependencies by passing an string like @dependency as argument and you'll get the resolved dependency instead of the string @dependency in your registered service injected.

options

key type Description
methodCalls Array<Array<string>> call methods after initialized the service.
tags Array<string> tags to identify multiple services

Recursive dependencies

To avoid recursive dependencies you can pass the registry itself as dependency:

registry.register('foo', Foo, ['@registry']);

Complex example

import registry from 'dd-service-registry';
import DependencyResolver from 'dd-service-registry/argument-resolver/DependencyResolver';

import ServiceA from 'serviceA';
import ServiceB from 'serviceB';
import ServiceC from 'serviceC';
import ServiceD from 'serviceD';

registry.addArgumentResolver(new DependencyResolver());

registry.register('serviceA', ServiceA, [], {
  methodCalls: [
    ['someMethod', 'some', 'arg'],
  ],
  tags: ['foo'],
});

registry.register('serviceB', ServiceB, ['@serviceA']);

registry.register('serviceC', ServiceC, [], {
  methodCalls: [
    ['setService', '@serviceB'],
  ],
});

registry.register('serviceD', ServiceD, [], {
  methodCalls: [
    ['setServices', '$foo'],
  ],
});

Argument resolver

You can build your own argument resolver and plug it into the registry. Implement the following interface and use the addArgumentResolver method in the registry.

interface Resolver {
  constructor(registry: ServiceRegistry);
  supports(argument: any): boolean;
  resolve(argument: any): any;
}

You can also extend the AbstractResolver.

Built in resolver

  • DependencyResolver - uses @ notation to resolve depndencies
  • TagResolver - uses $ notation to resolve tagged services

Package Sidebar

Install

npm i dd-service-registry

Weekly Downloads

0

Version

0.1.2

License

MIT

Last publish

Collaborators

  • marcel-devdude