Bağımlılık Enjeksiyonu

Servislerin Serbest Bırakılması

app.dispose ve provider.dispose ile servis temizliği, gezinme kapsamının kapanması, transient örneklerin izlenmesi.

Servislerin Serbest Bırakılması

Sağlayıcı kurduğu örnekleri kendisi serbest bırakır. Bir servis zamanlayıcı, dinleyici ya da bağlantı gibi bir kaynak tutuyorsa onu bırakan bir dispose() metodu yazılır; çağırmak sağlayıcının işidir:

@Injectable({ lifetime: "singleton" })
export class SyncService {
  private timer = setInterval(() => this.pull(), 60_000);

  async pull() {
    const response = await fetch("/api/notes");
    return response.json();
  }

  dispose() {
    clearInterval(this.timer);
  }
}
@Injectable({ lifetime: "singleton" })
export class SyncService {
  timer = setInterval(() => this.pull(), 60_000);

  async pull() {
    const response = await fetch("/api/notes");
    return response.json();
  }

  dispose() {
    clearInterval(this.timer);
  }
}

Ne zaman serbest bırakılır:

Nasıl: her örnekte varsa sırayla dispose(), close(), [Symbol.dispose]() ve [Symbol.asyncDispose]() çağrılır; birinin fırlattığı hata diğerlerini durdurmaz.

Yalnız kurulmuş örnekler serbest bırakılır: hiç istenmemiş bir singleton kurulmadığı için serbest de bırakılmaz; useValue ile verilen değer de ancak bir kez çözülmüşse bu işlemden geçer.

transient örnekler varsayılan olarak izlenmez; provider.enableAutoDisposeTransients() açıldığında bir alt kapsamda (createScope, gezinme kapsamı) üretilen transient örnekler o kapsamla birlikte serbest bırakılır. Kök sağlayıcıdan çözülen transient'lar yine izlenmez.

provider.getAllServices() sağlayıcının kullandığı ServiceCollection'ı verir.

Sonraki adım

MotifJS üstüne paket yazmanın dayandığı mekanizmalar için Motif Üstüne Paket Yazmak bölümüne geçin.