From 64407db69571462be7828729250aa679a449c7ff Mon Sep 17 00:00:00 2001 From: Alexander Zinn Date: Thu, 30 Oct 2025 03:15:41 -0400 Subject: [PATCH] Add dependency management classes and interfaces - Introduced Type and NamedType classes for type management - Implemented IDependencyProvider interface for dependency provision - Updated DependencyManager with a new lifecycle type 'service' - Added methods for type comparison and URN generation in Type and NamedType --- src/di/DependencyManager.ts | 1 + src/di/NamedType.ts | 22 ++++++++++++++++++++++ src/di/Type.ts | 19 +++++++++++++++++++ src/di/providers/IDependencyProvider.ts | 7 +++++++ 4 files changed, 49 insertions(+) create mode 100644 src/di/NamedType.ts create mode 100644 src/di/Type.ts create mode 100644 src/di/providers/IDependencyProvider.ts diff --git a/src/di/DependencyManager.ts b/src/di/DependencyManager.ts index 3165ab6..4b60b1c 100644 --- a/src/di/DependencyManager.ts +++ b/src/di/DependencyManager.ts @@ -7,6 +7,7 @@ type Registration = { /** * Lifecycle types: * - 'singleton': A single shared instance cached for the lifetime of the manager + * - 'sergice': A single shared instance cached for the lifetime of the manager * - 'transient': A new instance created on each resolve (transient) */ type Lifecycle = 'transient' | 'singleton'; diff --git a/src/di/NamedType.ts b/src/di/NamedType.ts new file mode 100644 index 0000000..f6a7c7c --- /dev/null +++ b/src/di/NamedType.ts @@ -0,0 +1,22 @@ +import { Type } from "./Type"; + +export class NamedType extends Type { + private readonly _name: string; + + constructor(name: string, type: string) { + super(type); + this._name = name; + } + + public getName(): string { + return this._name; + } + + public equals(other: NamedType): boolean { + return super.equal(other) && other instanceof NamedType && this.getName() === other.getName(); + } + + public override toURN(): string { + return 'urn:namedtype:' + super.getType() + '#' + this._name; + } +} diff --git a/src/di/Type.ts b/src/di/Type.ts new file mode 100644 index 0000000..310d767 --- /dev/null +++ b/src/di/Type.ts @@ -0,0 +1,19 @@ +export class Type { + private readonly _type: string; + + constructor(type: string) { + this._type = type; + } + + public getType(): string { + return this._type; + } + + public equal(other: Type): boolean { + return other instanceof Type && this.getType() === other.getType(); + } + + public toURN() { + return 'urn:type:' + this._type; + } +} diff --git a/src/di/providers/IDependencyProvider.ts b/src/di/providers/IDependencyProvider.ts new file mode 100644 index 0000000..c011194 --- /dev/null +++ b/src/di/providers/IDependencyProvider.ts @@ -0,0 +1,7 @@ +import type { Type } from "../Type"; +import type { NamedType } from "../NamedType"; + +export interface IDependencyProvider { + canProvide(type: Type | NamedType): boolean; + provide(type: Type | NamedType): unknown; +}