Laravel: Service Container

Service container pada Laravel adalah sebuah class dimana terdapat beberapa protected properties yang menyimpan data dalam bentuk key & value pairs.

Key & value tersebut digunakan untuk me-resolve class (key) menjadi class lainnya (value) sehingga dengan cara ini kita dapat merubah implementasi sebuah class dengan cepat.

Untuk penggunaan dependency injection, secara garis besar, Laravel bisa memahami bagaimana cara untuk me-resolve simple class tanpa harus mendaftarkannya terlebih dahulu. Namun untuk class yang lebih rumit, kita harus memberitahukan Laravel bagaimana cara untuk me-resolve class tersebut dengan caran mendaftarkannya.

class Foo {
   public function __construct(protected Bar $bar) {}
}

class Bar {}

// This code will run.
// We do not need to specify explicitly binding to class Foo nor Bar.
// Dependency to class Bar in class Foo is automaticaly resolved.
resolve('Foo');

Untuk mendaftarkan key & value pada service container terdapat beberapa metode:

Bind

/**
 * Register a binding with the container.
 *
 * @param  string  $abstract
 * @param  \Closure|string|null  $concrete
 * @param  bool  $shared
 * @return void
 *
 * @throws \TypeError
 */
public function bind($abstract, $concrete = null, $shared = false)

Parameter pertama adalah String. Biasanya merupakan nama class atau interface. Namun bisa juga menggunakan string biasa seperti ‘hash’.

Parameter kedua adalah Closure | String | Null.

  • Closure yang me-return sebuah instance dari sebuah class.
  • String nama class.
  • Jika Null maka tipe adalah String dengan value yang sama dengan parameter 1. Dengan catatan parameter 1 harus merupakan nama class.

Instance yang dihasilkan setiap kita me-resolve binding ini akan selalu baru. Sama seperti membuat instance dari class dengan keyword new.

Singleton

public function singleton($abstract, $concrete = null)
{
    $this->bind($abstract, $concrete, true);
}

Singleton adalah bind dengan parameter ke-3 $shared = true.

Setelah kita me-resolve binding ini maka instance yang dihasilkan akan disimpan pada section “instances” pada service container. Dan setiap kali kita me-resolve “key” tersebut maka kita akan mendapat instance yang sama (instance yang dihasilkan akan didaftarkan dalam property instances).

Instance

Parameter pertama adalah String.

Parameter kedua adalah Instance.

Pada dasarnya instance binding adalah global variable.

References:


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *