blackbox-ioc
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

blackbox-ioc

Version Version License

A basic Inversion Of Control container for decorator based wiring of class instances and services.

Blackbox IOC offers control of two distinct types of entity: Instances and Services.

Instances are associated with a name and can be autowired to a class' property.

Services are methods that provide a service and can be associated with a name and grouped by a tag. A service object can be created for all services with a given tag and then autowired to a class' property.

Table of Contents

Install

This package requires npm. You can install it by running:

npm i blackbox-ioc

Usage

Create a named instance of a class:

@named('calculator')
class Calculator {
  ...
}

An instance of class Calculator will be created and associated with the name calculator. The constructor must not take any parameters.

Autowire a class property to a named instance:

class Wrapper {
  @autowired('calculator')
  calc: Calcuator
}

Instances of Wrapper will automatically have the named instance of Calculator assigned to the calc property.

Create an instance using a factory method:

class Factories {
  @factory('logger')
  createLogger():Logger {
    ...
  }
}

The createLogger method will be called in order to create a new instance of the Logger class. The new instance will be associated with the name logger.

Identify a class as providing services:

@serviceClass('weather')
class WeatherService {
  getTemperature():number {
    ...
  }
  getHumidity():number {
    ...
  }
}

All methods in the class will become services grouped by the weather tag. By default, services are named according to the method names: i.e. getTemperature and getHumidity.

Create a service by name:

class WeatherService {
  @service('temp')
  getTemperature():number {
    ...
  }
}

The getTemperature method will provide a service named temp and will belong to the default tag.

Create a service by name and grouped with a tag:

class WeatherService {
  @taggedService('meteorology', 'temp')
  getTemperature():number {
    ...
  }
}

The getTemperature method will provide a service named temp and be grouped with any other services tagged with meteorology.

Autowire a class property to a service object:

class Wrapper {
  @autowiredService('weather')
  weatherService:any
}

Instances of Wrapper will automatically have a service object created and assigned to the weatherService property. The service object will include a method for each named service with the weather tag.

API

@named(name:string) Class decorator. Creates an instance of the class and associated it with name.

@factory(name:string) Method decorator. Calls the method and associates the returned instance with name.

@autowired(name:string) Property decorator. Assigns the instance named name to the property.

@serviceClass(tag:string) Class decorator. Creates an instance of the class and associates it with tag as its name. All of the class's methods will be marked as services tagged with tag and named name.

@service(name:string) Method decorator. The method will be marked as a service tagged with default and named name.

@taggedService(tag:string, name:string) Method decorator. The method will be marked as a service tagged with tag and named name.

@autowiredService(tag:string) Property decorator. The property will be assigned a new service object including a method for each service tagged with tag.

Maintainers

@ellipsistechnology

Contributing

PRs accepted.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © 2019 Ben Millar

Readme

Keywords

Package Sidebar

Install

npm i blackbox-ioc

Weekly Downloads

3

Version

1.0.2

License

MIT

Unpacked Size

108 kB

Total Files

20

Last publish

Collaborators

  • bmillar