Kerangka kerja Injeksi Ketergantungan / Pencari Layanan ultralight untuk Swift 5.x di iOS.
Catatan: Resolver sekarang secara resmi tidak digunakan lagi dan digantikan oleh sistem injeksi ketergantungan saya yang baru, Pabrik. Factory adalah sistem injeksi ketergantungan berbasis kontainer yang aman pada waktu kompilasi dan lebih kecil, lebih ringan, dan lebih cepat daripada Resolver. Sebagus apapun Resolver, Pabrik lebih baik.
Kerangka kerja Injeksi Ketergantungan mendukung pola desain Inversi Kontrol. Selain definisi teknis, injeksi ketergantungan bermuara pada:
| Memberi objek hal-hal yang dibutuhkannya untuk melakukan tugasnya.
Itu saja. Injeksi ketergantungan memungkinkan kita menulis kode yang digabungkan secara longgar, dan dengan demikian, lebih mudah digunakan kembali, ditiru, dan diuji.
Untuk lebih lanjut, lihat: Pengantar Lembut tentang Injeksi Ketergantungan.
Ada enam strategi injeksi ketergantungan klasik:
Resolver mendukung semuanya. Ikuti tautan untuk penjelasan singkat, contoh, serta kelebihan dan kekurangan masing-masing.
Berbicara tentang Anotasi, Resolver sekarang mendukung layanan penyelesaian menggunakan sintaks pembungkus properti baru di Swift 5.1.
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
Cukup tambahkan kata kunci Injected dan ketergantungan Anda akan teratasi secara otomatis. Lihat dokumentasi Anotasi untuk mengetahui lebih lanjut mengenai hal ini dan strategi lainnya.
Ada juga pembungkus @InjectedObject
yang dapat memasukkan Objek yang Dapat Diamati dalam tampilan SwiftUI.
Resolver diimplementasikan dalam lebih dari 700 baris kode sebenarnya dalam satu file, namun ia mengemas banyak fitur ke dalam 700 baris tersebut.
TLDR: Jika tidak ada yang lain, pastikan Anda membaca tentang Inferensi Tipe Otomatis, Cakupan, dan Opsional.
Menggunakan Resolver adalah proses tiga langkah yang sederhana:
Seperti disebutkan, Resolver adalah sistem Injeksi Ketergantungan ultralight, diimplementasikan dalam lebih dari 700 baris kode dan terkandung dalam satu file.
Resolver juga dirancang untuk kinerja. SwinjectStoryboard, misalnya, adalah sistem injeksi ketergantungan yang hebat, tetapi Resolver bekerja sekitar 800% lebih cepat dalam menyelesaikan rantai ketergantungan dibandingkan Swinject.
Dan tidak seperti beberapa sistem lainnya, Resolver ditulis dalam 100% Swift 5, tanpa kode Objective-C, metode swizzling, atau ketergantungan internal pada runtime Objective-C.
Selanjutnya, Penyelesai:
Terakhir, dengan Automatic Type Inference Anda juga cenderung menulis kode injeksi ketergantungan 40-60% lebih sedikit menggunakan Resolver.
Resolver mendukung CocoaPods dan Swift Package Manager.
pod " Resolver "
Resolver sendiri hanyalah sebuah file sumber tunggal (Resolver.swift), sehingga mudah juga untuk mengunduh file tersebut dan menambahkannya ke proyek Anda.
Perhatikan bahwa versi Resolver (1.4) saat ini mendukung Swift 5.3 dan versi minimum iOS yang saat ini didukung dengan rilis ini adalah iOS 11.
Baca panduan instalasi untuk informasi tentang mendukung versi sebelumnya.
Saya telah membuat repositori Builder saya menjadi publik. Ini adalah aplikasi iOS bergaya master/detail sederhana yang berisi contoh...
Saya juga menggunakannya untuk bermain dengan beberapa kode baru yang menggunakan pola pembangun gaya SwiftUI untuk membangun konstruksi antarmuka pengguna dan untuk membangun permintaan jaringan. Coba lihat.
Ada kemungkinan bahwa pembaruan terkini pada Resolver dapat menyebabkan perubahan yang dapat menyebabkan gangguan pada basis kode Anda.
Resolver 1.4 meningkatkan keamanan dan kinerja thread. Tidak ada perubahan besar, meskipun mengakses cakupan Resolver secara langsung kini sudah tidak digunakan lagi. Lihat: Cakupan.
Resolver 1.3 menambahkan ruang Nama ke Resolver. Mendaftarkan nama memungkinkan pelengkapan otomatis yang lebih baik dan membuat kode Anda lebih aman dengan mengurangi potensi kesalahan evaluasi waktu proses. Ini adalah kemungkinan perubahan besar. Lihat: Instans Bernama
Resolver 1.2 mengubah cara argumen diteruskan ke pabrik registrasi untuk memberikan dukungan yang lebih baik untuk meneruskan dan menangani argumen tunggal dan ganda. Ini adalah perubahan besar. Lihat: Melewati dan Menangani Berbagai Argumen
Resolver 1.5 memperbarui beberapa mekanisme registrasi dan caching yang digunakan dalam Resolver. Yang ini mungkin tidak menjadi masalah kecuali Anda menulis sesuatu yang bergantung pada perilaku internal Resolver.
Jika Anda ingin mendukung pekerjaan saya di Pabrik dan Resolver, pertimbangkan Sponsor GitHub! Ada banyak tingkatan untuk meningkatkan dukungan dan bahkan untuk bimbingan dan pelatihan perusahaan.
Atau kamu bisa membelikanku secangkir kopi!
Resolver dirancang, diimplementasikan, didokumentasikan, dan dikelola oleh Michael Long, Insinyur Perangkat Lunak iOS Utama dan 1.000 Penulis Teknologi Teratas di Medium.
Michael juga salah satu pemenang Open Source Peer Reward Google pada tahun 2021 atas karyanya di Resolver.
Resolver tersedia di bawah lisensi MIT. Lihat file LISENSI untuk info lebih lanjut.