Saya telah membaca artikel di MSDN tentang Persatuan (Injeksi Ketergantungan, Pembalikan Kontrol), tapi saya pikir saya perlu dijelaskan dalam istilah sederhana (atau contoh sederhana). Saya akrab dengan pola MVPC (kami menggunakannya di sini), tapi saya belum bisa memahami hal Unity ini, dan saya pikir ini adalah langkah selanjutnya dalam desain aplikasi kami.
c#
dependency-injection
inversion-of-control
unity-container
Ryan Abbott
sumber
sumber
Jawaban:
Unity hanyalah "wadah" IOC. Google StructureMap dan coba saja. Sedikit lebih mudah untuk grok, saya pikir, ketika hal-hal IoC baru bagi Anda.
Pada dasarnya, jika Anda memahami IoC maka Anda memahami bahwa apa yang Anda lakukan adalah membalikkan kontrol ketika sebuah objek dibuat.
Tanpa IOC:
Dengan wadah IoC:
Tanpa IoC, kelas Anda yang bergantung pada IMyService harus membuat versi konkret layanan untuk digunakan. Dan itu buruk karena sejumlah alasan (Anda telah menggabungkan kelas Anda ke versi konkret khusus dari IMyService, Anda tidak dapat mengujinya dengan mudah, Anda tidak dapat mengubahnya dengan mudah, dll.)
Dengan wadah IoC Anda "mengkonfigurasi" wadah untuk menyelesaikan dependensi tersebut untuk Anda. Jadi dengan skema injeksi berbasis konstruktor, Anda cukup meneruskan antarmuka ke ketergantungan IMyService ke dalam konstruktor. Saat Anda membuat MyClass dengan wadah Anda, wadah Anda akan menyelesaikan ketergantungan IMyService untuk Anda.
Menggunakan StructureMap, mengonfigurasi wadah terlihat seperti ini:
Jadi yang Anda lakukan adalah memberi tahu kontainer, "Ketika seseorang meminta IMyService, beri mereka salinan SomeConcreteService." Dan Anda juga telah menentukan bahwa ketika seseorang meminta MyClass, mereka mendapatkan MyClass konkret.
Itu semua benar-benar wadah IoC. Mereka dapat melakukan lebih banyak, tetapi itulah dorongannya - mereka menyelesaikan dependensi untuk Anda, jadi Anda tidak perlu (dan Anda tidak harus menggunakan kata kunci "baru" di seluruh kode Anda).
Langkah terakhir: ketika Anda membuat MyClass Anda, Anda akan melakukan ini:
Semoga itu bisa membantu. Silakan kirim email kepada saya.
sumber
Saya hanya menonton 30 menit Unity Dependency Injection IoC Screencast oleh David Hayden dan merasa itu adalah penjelasan yang baik dengan contoh-contoh. Berikut cuplikan dari catatan acara:
Screencast menunjukkan beberapa penggunaan umum dari Unity IoC, seperti:
sumber
Unity adalah perpustakaan seperti banyak perpustakaan lain yang memungkinkan Anda untuk mendapatkan instance dari tipe yang diminta tanpa harus membuatnya sendiri. Jadi diberikan.
Anda akan menggunakan perpustakaan seperti Unity untuk mendaftarkan Kalkulator yang akan dikembalikan ketika jenis ICalculator diminta alias IOC (Inversion of Control) (contoh ini teoretis, tidak benar secara teknis).
Jadi sekarang ketika Anda ingin contoh ICalculator Anda hanya ...
Pustaka IoC biasanya dapat dikonfigurasi untuk memegang singleton atau membuat instance baru setiap kali Anda menyelesaikan suatu tipe.
Sekarang katakanlah Anda memiliki kelas yang bergantung pada ICalculator untuk hadir, Anda dapat memiliki ..
Dan Anda bisa mengatur pustaka untuk menyuntikkan objek ke konstruktor saat itu dibuat.
Jadi DI atau Dependency Injection berarti menyuntikkan benda apa pun yang mungkin diperlukan orang lain.
sumber
Orang ini, WilcoxTutorials, memberikan demonstrasi yang sangat baik tentang wadah Unity yang ditujukan untuk pemula.
Bagian 1: http://www.youtube.com/watch?v=CWwe9Z0Gyew
Bagian 2: http://www.youtube.com/watch?v=PsIbevgzQQE
Dalam waktu kurang dari setengah jam dan Anda akan memahami dasar-dasarnya!
sumber
Unity adalah IOC. Maksud dari IOC adalah untuk abstrak kabel ketergantungan antara tipe di luar tipe itu sendiri. Ini memiliki beberapa keunggulan. Pertama-tama, ini dilakukan secara terpusat yang berarti Anda tidak perlu mengubah banyak kode ketika dependensi berubah (yang mungkin merupakan kasus untuk unit test).
Selain itu, jika pengkabelan dilakukan menggunakan data konfigurasi alih-alih kode, Anda benar-benar dapat mengatur ulang dependensi setelah penyebaran dan dengan demikian mengubah perilaku aplikasi tanpa mengubah kode.
sumber
MSDN memiliki Panduan Pengembang untuk Injeksi Ketergantungan Menggunakan Unity yang mungkin berguna.
Panduan Pengembang dimulai dengan dasar-dasar apa itu injeksi dependensi, dan berlanjut dengan contoh bagaimana menggunakan Unity untuk injeksi dependensi. Pada Februari 2014, Panduan Pengembang mencakup Unity 3.0, yang dirilis pada April 2013.
sumber
Saya membahas sebagian besar contoh Ketergantungan Injeksi di ASP.NET Web API 2
Dalam mekanisme Injeksi Otomatis DIAutoV2Controller.cs digunakan
Dalam DIV2Controller.cs semuanya akan disuntikkan dari kelas Dependency Configuration Resolver
Mengkonfigurasi Penyelesai Ketergantungan
sumber