Saya sedang membaca buku yang menunjukkan cara kerja Dependency Injection saat menggunakan fungsi pabrik, di bawah ini kodenya:
//MemoryRepository implements IRepository
public class Startup
{
private IHostingEnvironment env;
public Startup(IHostingEnvironment hostEnv) => env = hostEnv;
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IRepository>(provider =>
{
if (env.IsDevelopment())
{
var x = provider.GetService<MemoryRepository>();
return x;
}
else
{
return new XXX(); //return sth else;
}
});
services.AddTransient<MemoryRepository>();
...//register other components which are dependencies of MemoryRepository
services.AddMvc();
}
...
}
Saya tidak tahu mengapa services.AddTransient<MemoryRepository>();
diperlukan?
Karena services.AddTransient<IRepository>{...}
sudah mendefinisikan ruang lingkup "Transient", yang berarti bahwa "setiap kali IRepository diperlukan, objek MemoryRepository baru akan disediakan (jika itu adalah lingkungan pengembangan)", jadi semuanya sudah diatur, dependensi MemoryRepository lainnya akan ditangani dengan registrasi berikut ini.
Q1-Jadi kenapa kita masih perlu memiliki services.AddTransient<MemoryRepository>();
lagi? kalau saya komen, aplikasinya tidak bisa jalan, jadi pernyataan ini perlu, cuma gak tau kenapa
Q2- jika saya mengubah konfigurasi Layanan sebagai:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IRepository, MemoryRepository>();
...
}
aplikasi berjalan dengan sukses, jadi mengapa saya tidak perlu menambahkan services.AddTransient<MemoryRepository>();
sebagai:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IRepository, MemoryRepository>();
services.AddTransient<MemoryRepository>();
...
}