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

NameTypeRequired
targetTInstancerequired

Returns

boolean

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

Parameters

NameTypeRequired
dataTIdDatarequired

Returns

TInstance | undefined

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

Parameters

NameTypeRequired
idTIdrequired

Returns

TInstance | undefined

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

Parameters

NameTypeRequired
dataTIdDatarequired

Returns

TId | undefined

getOrCreate
methodpublic
public getOrCreate(data: TData): TInstance

Parameters

NameTypeRequired
dataTDatarequired

Returns

TInstance

getReferenceCount
methodpublic
public getReferenceCount(id: TId): number

Parameters

NameTypeRequired
idTIdrequired

Returns

number

has
methodpublic
public has(id: TId): boolean

Parameters

NameTypeRequired
idTIdrequired

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

NameTypeRequired
indent?numberoptional
level?numberoptional

Returns

string[]

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

Parameters

NameTypeRequired
indent?unknownoptional
level?unknownoptional

Returns

string

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

Parameters

NameTypeRequired
dataTIdDatarequired

Returns

TId

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

Parameters

NameTypeRequired
dataTDatarequired
idTIdrequired

Returns

TInstance

getOrCreateId
methodprotected
protected getOrCreateId(data: TIdData): TId

Parameters

NameTypeRequired
dataTIdDatarequired

Returns

TId

onDispose
methodprotected
protected onDispose(): void

Parameters

No parameters.

Returns

void

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

Parameters

NameTypeRequired
_instanceTInstancerequired
_dataTDatarequired

Returns

void

onReleased
methodprotected
protected onReleased(): void

Parameters

No parameters.

Returns

void

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

Parameters

NameTypeRequired
_instanceTInstancerequired
_idTIdrequired

Returns

void

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

Parameters

NameTypeRequired
oldKeyTIdrequired
newKeyTIdrequired

Returns

void

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

Parameters

NameTypeRequired
idTIdrequired
change1 | -1required
instanceTInstancerequired
forceRelease?booleanoptional

Returns

number