Saya pikir premis Anda agak bingung di sini, Anda berbicara tentang menyuntikkan pabrik, tetapi pola pabrik adalah pola kreatif yang tujuannya adalah untuk melakukan subset dari apa yang dilakukan kerangka kerja injeksi ketergantungan, ketika kerangka kerja DI tidak lazim pola ini adalah berguna karena alasan itu. Namun jika Anda memiliki kerangka kerja DI, Anda tidak lagi benar-benar membutuhkan pabrik karena kerangka kerja DI dapat memenuhi tujuan yang seharusnya dipenuhi oleh pabrik.
Yang mengatakan, izinkan saya menjelaskan sedikit tentang injeksi ketergantungan dan bagaimana Anda biasanya akan menggunakannya.
Ada berbagai cara untuk melakukan injeksi ketergantungan, tetapi yang paling umum adalah injeksi konstruktor, injeksi properti, dan DIContainer langsung. Saya akan berbicara mengenai injeksi konstruktor karena injeksi properti adalah pendekatan yang salah sebagian besar waktu (pendekatan yang tepat beberapa waktu), dan akses DIContainer tidak disukai kecuali ketika Anda benar-benar tidak dapat melakukan salah satu dari pendekatan lain.
Injeksi konstruktor adalah tempat Anda memiliki antarmuka untuk dependensi dan DIContainer (atau pabrik) yang mengetahui implementasi konkret untuk dependensi itu, dan di mana pun Anda membutuhkan objek yang bergantung pada antarmuka itu, pada saat konstruksi Anda menyerahkan implementasi dari pabrik ke Itu.
yaitu
IDbConnectionProvider connProvider = DIContainer.Get<IDbConnectionProvider>();
IUserRepository userRepo = new UserRepository(connProvider);
User currentUser = userRepo.GetCurrentUser();
Banyak kerangka kerja DI dapat menyederhanakan ini secara signifikan ke tempat DIContainer Anda akan memeriksa konstruktor UserRepository untuk antarmuka yang dikenal dengan implementasi konkret, dan secara otomatis akan menyerahkannya kepada Anda; teknik ini sering disebut Inversion of Control, meskipun DI dan IoC keduanya istilah yang dipertukarkan banyak dan memiliki perbedaan yang samar (jika ada).
Sekarang jika Anda bertanya-tanya bagaimana kode menyeluruh mengakses DIContainer, baik Anda dapat memiliki kelas statis untuk mengaksesnya atau apa yang lebih tepat adalah bahwa sebagian besar kerangka kerja DI memungkinkan Anda untuk membuat DIContainer baru, di mana ia sebenarnya hanya akan berperilaku sebagai bungkus ke kamus tunggal internal untuk jenis yang diketahuinya konkret untuk antarmuka yang diberikan.
Itu artinya, Anda dapat membuat DIContainer baru di mana saja yang Anda inginkan dalam kode dan secara efektif mendapatkan DIContainer yang telah Anda konfigurasikan untuk mengetahui hubungan antar muka dengan beton. Cara biasa menyembunyikan DIContainer dari bagian kode yang tidak boleh berinteraksi dengannya secara langsung adalah hanya memastikan hanya proyek yang diperlukan yang memiliki referensi ke kerangka kerja DI.