C# Indonesia
Kiro Honjou

oh iyah om nanya lagi ini ada cara yang lebih baik gak sih om? i mean koneksinya itu cukup sekali aja kayak bikin koneksi mysql di php gitu loh om

Ronny Gunawan ️

kalo mau enak coba bikin dummy project aja yang kirim sesuatu ke client tiap 1 detik

ada gak sih cara supaya koneksinya itu sekali eksekusi aja

dan bisa dipakai berulang

dalemnya begini om

Ronny Gunawan ️
Kiro Honjou

oh iyah om nanya lagi ini ada cara yang lebih baik gak sih om? i mean koneksinya itu cukup sekali aja kayak bikin koneksi mysql di php gitu loh om

biasanya patternnya gini

builder.Services.AddSingleton<FooConnection>(() => {
  var connectionString = // ambil dari configuration
  return new FooConnection(connectionString);
});
Ronny Gunawan ️

jadi AddSingleton itu terima function untuk instantiate instancenya

Ronny Gunawan ️

yup

Kiro Honjou

Kirain ane services builder itu untuk hal2 yang berkaitan sama aspnya doang

Ronny Gunawan ️

itu namanya dependency injection

Ronny Gunawan ️

dependency injection in a nutshell gini:

  1. semua class dan interface bisa didaftarkan ke service collection. anggap service collection adalah dictionary dengan key = type of the instance, dan value = the instance atau cara bikin instancenya. cara daftarinnya gini:
builder.Services.AddSingleton<Foo>();
builder.Services.AddTransient<Bar>();
builder.Services.AddScoped<Baz>(() => new Baz());
  1. semua yang sudah didaftarkan di service collection bisa di-inject ke constructor dari class lain yang juga sudah didaftarkan ke service collection. ini namanya dependency injection.
class Bar {
  private readonly Foo _foo;  
  public Bar(Foo foo) {
    _foo = foo;
  }
}

constructor dari Bar di sini ngga pernah kita panggil sama sekali pakai new statement. Bar itu sendiri bakal kita inject ke constructor dari class lain, yang mana class lain itu juga bakal diinject ke something else. pokoknya berantai saling inject gitu tanpa ada yang pakai keyword new
3. ada beberapa hal yang invoked by framework. misalnya aspnetcore framework, misalnya controller. controller ini ngga diinject ke constructor class lain, tapi just trust the framework. semua yang kita taruh di constructornya controller akan diinject

Transient = setiap kali injected create new instance
Scoped = 1 instance dibuat per scope (di aspnetcore, 1 scope = 1 http request)
Singleton = 1 instance dibuat per app instance

lock missing, volatile missing, interlocked missing

masih banyak sih

oh iya ada Channel juga

Atau entire?

Ronny Gunawan ️

entire app

kalau mau global singleton (1 instance per planet) bisa pake orleans