From 2476337523904f6bd1488223301bfa778b891b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Fri, 17 Jan 2025 00:26:41 +0100 Subject: [PATCH] feat(inversify-code-examples): add bindingWhenSyntaxApiWhen example --- .../v7/bindingWhenSyntaxApiWhen.int.spec.ts | 9 +++ .../examples/v7/bindingWhenSyntaxApiWhen.ts | 61 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.int.spec.ts create mode 100644 packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.ts diff --git a/packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.int.spec.ts b/packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.int.spec.ts new file mode 100644 index 00000000..d2b47baa --- /dev/null +++ b/packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.int.spec.ts @@ -0,0 +1,9 @@ +import { describe, expect, it } from '@jest/globals'; + +import { ninjaDamage } from './bindingWhenSyntaxApiWhen'; + +describe('BindingWhenSyntax API (when)', () => { + it('should bind right ninja weapon', () => { + expect(ninjaDamage).toBe(5); + }); +}); diff --git a/packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.ts b/packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.ts new file mode 100644 index 00000000..49bc2f7a --- /dev/null +++ b/packages/docs/tools/inversify-code-examples/src/examples/v7/bindingWhenSyntaxApiWhen.ts @@ -0,0 +1,61 @@ +import { + BindingMetadata, + Container, + inject, + injectable, + named, +} from 'inversify7'; + +interface Weapon { + damage: number; +} + +export class Katana implements Weapon { + public readonly damage: number = 10; +} + +export class Shuriken implements Weapon { + public readonly damage: number = 5; +} + +const container: Container = new Container(); + +// Begin-example +const ninjaId: symbol = Symbol.for('Ninja'); +const weaponId: symbol = Symbol.for('Weapon'); + +@injectable() +class Ninja { + constructor( + @inject(weaponId) + @named('shuriken') + public readonly weapon: Weapon, + ) {} +} + +container.bind(ninjaId).to(Ninja); + +const whenTargetNamedConstraint: ( + name: string, +) => (bindingMetadata: BindingMetadata) => boolean = + (name: string) => + (bindingMetadata: BindingMetadata): boolean => + bindingMetadata.name === name; + +container + .bind(weaponId) + .to(Katana) + .when(whenTargetNamedConstraint('katana')); + +container + .bind(weaponId) + .to(Shuriken) + .when(whenTargetNamedConstraint('shuriken')); + +const ninja: Ninja = container.get(ninjaId); + +// Returns 5 +const ninjaDamage: number = ninja.weapon.damage; +// End-example + +export { ninjaDamage };