Skip to content

WorkingWithDefinitions

Mauro edited this page May 27, 2022 · 7 revisions

Working with definitions

You may sometimes want to use definitions to build your container or to modify the container behaviour, for example in compiler pass process methods.

Using definition to build your container

import {ContainerBuilder, Definition} from 'node-dependency-injection'

let container = new ContainerBuilder()
let definition = new Definition(SomeClass)
container.setDefinition('some_manager', definition)

This is a shortcut of

import {ContainerBuilder, Definition} from 'node-dependency-injection'

let container = new ContainerBuilder()
container.register('some_manager', SomeClass)

You can also send arguments in the definition constructor like:

import {ContainerBuilder, Definition, PackageReference} from 'node-dependency-injection'

let container = new ContainerBuilder()
let definition = new Definition(SomeClass, [
	'some_string_dependency', 
	new PackageReference('some-npm-package')
])
container.setDefinition('some_manager', definition)

Method Calls

If the service you are working with uses setter injection then you can manipulate any method calls in the definitions as well:

definition.addMethodCall('setLogger', [new Reference('logger')]);

Service as private

definition.public = false

Get service instance as factory

definition.setFactory(SomeManager, 'getFactory')

Set service as deprecated

definition.deprecated = 'Example of message deprecation'

Set service as lazy

definition.lazy = true

Add tag to service

definition.addTag('tag_name')

Add property to service

definition.addProperty('property_name', new Reference('app.some_manager'))

Container definition methods

  • findTaggedServiceIds(string tagName): Iterable get a list of tagged services Definitions
  • hasDefinition(string serviceName): boolean find out if there is an serviceName definition
  • has(string serviceName): boolean find out if there is an serviceName definition or alias
  • getDefinition(string serviceName): Definition get the serviceName definition
  • findDefinition(string serviceName): Promise get the definition with the serviceName ID or alias
  • setDefinition(Definition definition): Definition sets a definition to register in to the container
  • removeDefinition(string serviceName): boolean removes an already set definition