Decorators
This section covers decorators used to provide binding metadata.
provide
Decorator used to set binding metadata to be loaded into the container.
Like any other decorator, @provide
has no effect on non loaded modules. Make sure to import the module where the decorated class is defined.
Example: providing class self binding
You can use the @provide
decorator to provide a class self binding by not passing any parameters.
@injectable()
@provide()
class Katana {
public readonly damage: number = 10;
}
@injectable()
@provide()
class Ninja {
constructor(
@inject(Katana)
public readonly katana: Katana,
) {}
}
Example: providing class service binding
You can use the @provide
decorator to provide a class service binding by passing the service identifier as a parameter.
@injectable()
@provide('Katana')
class Katana {
public readonly damage: number = 10;
}
@injectable()
@provide('Ninja')
class Ninja {
constructor(
@inject(Katana)
public readonly katana: Katana,
) {}
}
Example: providing class service binding with a custom binding constraint
You can use the @provide
decorator to provide a class service binding with a custom binding constraint by passing the service identifier and a bind action as parameters.
The bind action receives the fluent syntax to add additional configuration such as scopes and constraints.
@injectable()
@provide('Katana', (bind: BindInWhenOnFluentSyntax<Katana>) => {
bind.inSingletonScope().whenNamed('GoldenKatana');
})
class Katana {
public readonly damage: number = 10;
}
Example: providing multiple bindings
You can use the @provide
decorator to provide multiple bindings by applying it multiple times.
@injectable()
@provide()
@provide('Katana')
class Katana {
public readonly damage: number = 10;
}
@injectable()
@provide()
@provide('Ninja')
class Ninja {
constructor(
@inject(Katana)
public readonly katana: Katana,
) {}
}