Я использую BreezeJS.Предположим, у нас есть пользовательский класс EntityBase
и мы подписаны на некоторые entityAspect
события (propertyChanged
, validationErrorsChanged
) и / или на события его свойств коллекции (arrayChanged
) в его методе инициализации сущности (пример ниже).находится в TypeScript):
import { Entity, EntityAspect } from "breeze-client";
export abstract class EntityBase implements Entity {
public static initializer(entity: EntityBase): void {
const entityAspect: EntityAspect = entity.entityAspect;
entityAspect.propertyChanged.subscribe(EntityBase.propertyChangedHandler);
entityAspect.validationErrorsChanged.subscribe(EntityBase.validationErrorHandler);
}
}
export class Contact extends EntityBase {
/// [Initializer]
public static initializer(entity: EntityBase): void {
super.initializer(entity);
(entity as Contact).addresses.arrayChanged.subscribe(Contact.addressesChangedHandler);
}
/// </code>
// Generated code. Do not place code below this line.
public addresses: Address[];
}
// Somewhere where MetadataStore is initialized.
metadataStore.registerEntityTypeCtor("Contact", Contact, Contact.initializer);
Это означает, что в какой-то момент времени между отсоединением сущности и перед его сборкой мусора мы должны отписаться от этих событий, чтобы предотвратить утечки памяти.Таким образом, нам нужно иметь финализатор / деструктор сущности.
Я не вижу каких-либо очевидных дополнительных модулей в жизненном цикле сущности для этого в Breeze API.
Может кто-нибудьдать представление о том, как это сделать?