Saya memecahkan masalah ini seperti itu: menyuntikkan pabrik ketergantungan. Di pabrik-pabrik itu, pertama-tama selesaikan ketergantungan karena terdaftar dalam wadah, kemudian "deserialisasi" semua data yang tersisa: json.net memungkinkan untuk mengisi bidang dalam objek yang ada.
Karena kode pabrik sejalan dengan kode kabel wadah IoC, saya tidak berpikir menggunakan container.Resolve
di dalam pabrik melanggar aturan, yang container
harus digunakan hanya di satu tempat dalam kode: di mana semua kabel terjadi.
Sampai sekarang, saya mencoba untuk membuat proses ini otomatis (sebagai lawan dari apa yang saya telah menguji pendekatan itu di) menggunakan refleksi. Ya, tidak banyak yang tersisa dari deserialisasi json.net itu sendiri, bagian dari itu diganti dengan kode kustom, tapi saya pikir, mengapa repot-repot.
Juga, apa pemikiran / keputusan akhir Anda tentang masalah ini? Setelah membaca posting ini saya melihat dua cara: deserialize, lalu suntikkan; atau menyuntikkan, lalu deserialize (mengisi). Dan saya masih menemukan cara saya lebih baik. Akan senang mendengar argumen yang bertentangan dengan ini (saya kira, bahwa cara saya mungkin lebih baik untuk kasus saya, tetapi tidak dapat dengan jelas membayangkan kasus alternatif yang baik, di mana gagal, hanya beberapa tebakan kecil)
This would eliminate the possibility of using Constructor injected DI
- Kenapa? Anda masih dapat memiliki instruktur berparameter, selama Anda menyertakan konstruktor default untuk keperluan serialisasi (konstruktor default dapat bersifat pribadi, jika Anda mau).