API Reference

KeyedInstanceFactoryabstract class

Base class for key-scoped singleton lifecycle management (create/release with reference counting).

When to use

This class keeps a reference count for each singleton key. create(...) increases the count, and release(...) decreases it. When the count reaches 0, the instance is released. It is important that every successful create(...) call has a matching release(...) call to prevent memory leaks.

Related: KeyedInstanceFactory docs

Quick facts
Kind
abstract class
Implements
IKeyedInstanceFactory<TId, TData, TInstance, TIdData>
Members
20
Package
@rs-x/core

Import

import { KeyedInstanceFactory } from '@rs-x/core';

Example

import { KeyedInstanceFactory } from '@rs-x/core';

type UserData = { id: string; name: string };

class MyKeyedInstanceFactory extends KeyedInstanceFactory<string, UserData, UserData, UserData> {
  public getId(data: UserData): string | undefined {
    return data.id;
  }

  protected createId(data: UserData): string {
    return data.id;
  }

  protected createInstance(data: UserData): UserData {
    return { ...data };
  }
}

const factory = new MyKeyedInstanceFactory();

// First create: referenceCount = 1
const first = factory.create({ id: 'u1', name: 'Ada' });

Members

20 members in this abstract class.

constructor
constructorprotected
protected constructor()

Parameters

No parameters.

exists
methodpublic
public exists(target: TInstance): boolean

Parameters

Name
Type
Required
target
TInstance
required

Returns

boolean

getFromData
methodpublic
public getFromData(data: TIdData): TInstance | undefined

Parameters

Name
Type
Required
data
TIdData
required

Returns

TInstance | undefined

getFromId
methodpublic
public getFromId(id: TId): TInstance | undefined

Parameters

Name
Type
Required
id
TId
required

Returns

TInstance | undefined

getId
methodpublicabstract
public abstract getId(data: TIdData): TId | undefined

Parameters

Name
Type
Required
data
TIdData
required

Returns

TId | undefined

getOrCreate
methodpublic
public getOrCreate(data: TData): TInstance

Parameters

Name
Type
Required
data
TData
required

Returns

TInstance

getReferenceCount
methodpublic
public getReferenceCount(id: TId): number

Parameters

Name
Type
Required
id
TId
required

Returns

number

has
methodpublic
public has(id: TId): boolean

Parameters

Name
Type
Required
id
TId
required

Returns

boolean

ids
methodpublic
public ids(): MapIterator<TId>

Parameters

No parameters.

Returns

MapIterator<TId>

toLines
methodpublic
public toLines(
  indent: number = 4,
  level: number = 0
): string[]

Parameters

Name
Type
Required
indent?
number
optional
level?
number
optional

Returns

string[]

toString
methodpublic
public toString(
  indent = 4,
  level = 0
): string

Parameters

Name
Type
Required
indent?
unknown
optional
level?
unknown
optional

Returns

string

createId
methodprotectedabstract
protected abstract createId(data: TIdData): TId

Parameters

Name
Type
Required
data
TIdData
required

Returns

TId

createInstance
methodprotectedabstract
protected abstract createInstance(
  data: TData,
  id: TId
): TInstance

Parameters

Name
Type
Required
data
TData
required
id
TId
required

Returns

TInstance

getOrCreateId
methodprotected
protected getOrCreateId(data: TIdData): TId

Parameters

Name
Type
Required
data
TIdData
required

Returns

TId

onDispose
methodprotected
protected onDispose(): void

Parameters

No parameters.

Returns

void

onInstanceCreated
methodprotected
protected onInstanceCreated(
  _instance: TInstance,
  _data: TData
): void

Parameters

Name
Type
Required
_instance
TInstance
required
_data
TData
required

Returns

void

onReleased
methodprotected
protected onReleased(): void

Parameters

No parameters.

Returns

void

releaseInstance
methodprotected
protected releaseInstance(
  _instance: TInstance,
  _id: TId
): void

Parameters

Name
Type
Required
_instance
TInstance
required
_id
TId
required

Returns

void

replaceKey
methodprotected
protected replaceKey(
  oldKey: TId,
  newKey: TId
): void

Parameters

Name
Type
Required
oldKey
TId
required
newKey
TId
required

Returns

void

updateReferenceCount
methodprotected
protected updateReferenceCount(
  id: TId,
  change: 1 | -1,
  instance: TInstance,
  forceRelease?: boolean
): number

Parameters

Name
Type
Required
id
TId
required
change
1 | -1
required
instance
TInstance
required
forceRelease?
boolean
optional

Returns

number