
* refactor: consolidate registration decorators - Introduced `Register` decorator to handle class and instance registration in the DI container. - Deprecated `RegisterInstance` in favor of `Register`, which now internally handles instance registration. - Added support for marking dependencies as deprecated with a warning logged upon first resolution. - Updated documentation with examples and notes on deprecation. * tests: add mode parameter to RegisterInstanceDecorator - Introduced a `mode` parameter to the `test_RegisterInstanceDecorator` function allowing 'instance' or 'standalone' modes. - Updated test cases to utilize the new `mode` parameter when registering an instance. - Disabled specific ESLint rule in `Decorators.test.ts` for deprecation warnings. - Added an additional test call to `test_RegisterInstanceDecorator` with 'instance' mode. * docs: Reflect changes to changelog * refactor: add region tags for overloads in Register.ts * docs: Reflect changes to changelog * refactor: consolidate registration decorators - Introduced `Register` decorator to handle class and instance registration in the DI container. - Deprecated `RegisterInstance` in favor of `Register`, which now internally handles instance registration. - Added support for marking dependencies as deprecated with a warning logged upon first resolution. - Updated documentation with examples and notes on deprecation. * tests: add mode parameter to RegisterInstanceDecorator - Introduced a `mode` parameter to the `test_RegisterInstanceDecorator` function allowing 'instance' or 'standalone' modes. - Updated test cases to utilize the new `mode` parameter when registering an instance. - Disabled specific ESLint rule in `Decorators.test.ts` for deprecation warnings. - Added an additional test call to `test_RegisterInstanceDecorator` with 'instance' mode. * docs: Reflect changes to changelog * refactor: add region tags for overloads in Register.ts * docs: Reflect changes to changelog * docs: Reflect changes to changelog und push version
40 lines
1.7 KiB
TypeScript
40 lines
1.7 KiB
TypeScript
import { Register } from './Register';
|
|
import { Identifier } from '../types/Identifier';
|
|
import { InitDelegate } from '../types/InitDelegate';
|
|
|
|
/**
|
|
* A decorator to register an instance of a class in the DI (Dependency Injection) container.
|
|
* @template TargetType The type of the class whose instance is to be registered.
|
|
* @param identifier The identifier used to register the instance in the DI container.
|
|
* @see {@link Identifier} for more information on identifiers.
|
|
* @param init An optional initializer function which get the constructor of the class
|
|
* as input and returns an instance of the class.
|
|
* @param deprecated If true, the dependency is deprecated and a warning
|
|
* is logged only once upon the first resolution of the dependency.
|
|
* @see {@link InitDelegate} for more information on initializer functions.
|
|
* @returns The decorator function to be applied on the class.
|
|
* @example
|
|
* ```ts
|
|
* \@RegisterInstance('MyClassInstanceIdentifier', (constructor) => new constructor())
|
|
* class MyClass {
|
|
* // ...
|
|
* }
|
|
* ```
|
|
* @deprecated Use {@link Register} instead. This decorator already uses the {@link Register} decorator internally.
|
|
*/
|
|
export function RegisterInstance<
|
|
TargetType extends new (..._args: unknown[]) => InstanceType<TargetType>,
|
|
>(
|
|
identifier: Identifier,
|
|
init?: InitDelegate<
|
|
TargetType & { new (..._args: unknown[]): InstanceType<TargetType> },
|
|
InstanceType<TargetType>
|
|
>,
|
|
deprecated?: boolean,
|
|
): (constructor: TargetType, ...args: unknown[]) => void {
|
|
const initDelegate = typeof init === 'function' ? init : undefined;
|
|
|
|
if (initDelegate) return Register(identifier, initDelegate, deprecated);
|
|
else return Register(identifier, 'instance', deprecated);
|
|
}
|