0Pricing
TypeScript Academy · Pelajaran

Kontainer DI dengan InversifyJS

Daftarkan dan selesaikan layanan dengan kontainer.

Kontainer DI dengan InversifyJS adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.

Mengapa Menggunakan Kontainer DI?

Menghubungkan graf objek besar secara manual melelahkan dan rentan terhadap error. Kontainer DI mendaftarkan cara membuat setiap dependensi dan menyelesaikannya secara otomatis. InversifyJS adalah kontainer TypeScript yang populer.

Menginstal dan Mengaktifkan

InversifyJS bergantung pada dekorator dan metadata refleksi. Anda mengimpor dari inversify dan mengaktifkan experimentalDecorators serta reflect-metadata.

import "reflect-metadata";
import { Container, injectable, inject } from "inversify";

Menandai Kelas dengan @injectable

Dekorator @injectable() memberi tahu kontainer bahwa sebuah kelas dapat dibuat dan disuntikkan. Setiap kelas yang dibuat oleh kontainer memerlukannya.

import { injectable } from "inversify";

@injectable()
class ConsoleLogger {
  log(m: string) { console.log(m); }
}

Menyatakan Dependensi dengan @inject

Gunakan @inject(token) pada parameter konstruktor untuk memberi tahu kontainer binding mana yang harus disediakan. Token tersebut mengidentifikasi dependensi.

@injectable()
class OrderService {
  constructor(@inject("Logger") private logger: ConsoleLogger) {}
  place() { this.logger.log("placed"); }
}

Membuat Kontainer

Sebuah Container menyimpan semua binding untuk app Anda. Anda membuatnya saat app dimulai dan mendaftarkan dependensi di dalamnya.

import { Container } from "inversify";
const container = new Container();

Menghubungkan Antarmuka dengan Implementasi

API berantai bind<T>(token).to(Impl) memetakan token, yang sering kali berupa antarmuka, ke kelas konkret yang akan dibuat oleh kontainer.

interface Logger { log(m: string): void; }
container.bind<Logger>("Logger").to(ConsoleLogger);

Menyelesaikan Layanan

container.get<T>(token) membuat layanan yang diminta, lalu secara rekursif membuat dan menyuntikkan dependensinya untuk Anda.

container.bind<OrderService>(OrderService).toSelf();
const svc = container.get<OrderService>(OrderService);
svc.place();

Mengganti Implementasi

Untuk menggunakan logger yang berbeda, hubungkan kembali token tersebut ke kelas lain. Konsumen tidak perlu diubah karena bergantung pada token, bukan kelas konkret.

@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);

Lingkup Singleton

Secara bawaan, setiap get dapat membuat instance baru. Gunakan inSingletonScope() untuk berbagi satu instance di seluruh app.

container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();

Menguji dengan Kontainer

Dalam pengujian, Anda dapat membuat kontainer baru dan menghubungkan objek tiruan, sehingga memperoleh manfaat penghubungan yang sama sekaligus mengisolasi unit yang sedang menjalani test.

const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);

Kompromi Kontainer

Kontainer mengurangi kode berulang untuk graf besar, tetapi menambahkan dependensi, dekorator, dan lapisan perantara. Untuk app kecil, injeksi konstruktor manual sering kali lebih jelas.

Pemeriksaan Singkat

Pemeriksaan singkat tentang pelajaran ini.

Ringkasan

InversifyJS menggunakan @injectable, @inject(token), dan sebuah Container. Anda menggunakan bind<Interface>(token).to(Impl), lalu container.get menyelesaikan grafik dependensi secara otomatis. InversifyJS memerlukan reflect-metadata dan dekorator, dengan menukar kode berulang dengan indireksi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kontainer DI dengan InversifyJS” gratis?

Ya — teks lengkap “Kontainer DI dengan InversifyJS” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kontainer DI dengan InversifyJS”?

Daftarkan dan selesaikan layanan dengan kontainer. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Kontainer DI dengan InversifyJS” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Inversi Kontrol
  2. Injeksi Konstruktor
  3. Kontainer DI dengan InversifyJS
  4. Token Layanan yang Aman Secara Jenis
← Kembali ke TypeScript Academy