Saya minta maaf jika ini sepertinya pengulangan pertanyaan yang lain, tetapi setiap kali saya menemukan artikel mengenai topik tersebut, sebagian besar hanya berbicara tentang apa itu DI. Jadi, saya mendapatkan DI, tetapi saya mencoba memahami perlunya wadah IoC, yang tampaknya semua orang masuki. Apakah titik wadah IoC benar-benar hanya untuk "menyelesaikan otomatis" implementasi konkret dari dependensi? Mungkin kelas saya cenderung tidak memiliki beberapa dependensi dan mungkin itu sebabnya saya tidak melihat masalah besar, tetapi saya ingin memastikan bahwa saya memahami utilitas wadah dengan benar.
Saya biasanya memecah logika bisnis saya menjadi kelas yang mungkin terlihat seperti ini:
public class SomeBusinessOperation
{
private readonly IDataRepository _repository;
public SomeBusinessOperation(IDataRespository repository = null)
{
_repository = repository ?? new ConcreteRepository();
}
public SomeType Run(SomeRequestType request)
{
// do work...
var results = _repository.GetThings(request);
return results;
}
}
Jadi itu hanya memiliki satu ketergantungan, dan dalam beberapa kasus mungkin memiliki yang kedua atau ketiga, tetapi tidak terlalu sering. Jadi, apa pun yang memanggil ini dapat lewat repo sendiri atau mengizinkannya menggunakan repo default.
Sejauh pemahaman saya saat ini tentang wadah IoC, semua wadah lakukan adalah menyelesaikan IDataRepository. Tetapi jika hanya itu yang dilakukannya, maka saya tidak melihat satu ton nilai pun di dalamnya karena kelas operasional saya telah menentukan mundur ketika tidak ada ketergantungan yang lewat. Jadi satu-satunya manfaat lain yang dapat saya pikirkan adalah bahwa jika saya memiliki beberapa operasi seperti ini menggunakan repo fallback yang sama, saya bisa mengubah repo itu di satu tempat yang merupakan registry / pabrik / wadah. Dan itu hebat, tetapi apakah itu?
ConcreteRepository
dan (2) Anda dapat menyediakan dependensi tambahan untuk ConcreteRepository
(koneksi database akan umum, misalnya).