Dengan risiko melangkah ke wilayah perang suci, Apa kekuatan dan kelemahan kerangka kerja DI / IoC yang populer ini, dan bisakah seseorang dengan mudah dianggap yang terbaik? ..:
- Tidak ada
- Kesatuan
- Castle.Windsor
- Autofac
- StructureMap
Apakah ada Kerangka DI / IoC lain untuk C # yang belum saya daftarkan di sini?
Dalam konteks kasus penggunaan saya, saya sedang membangun aplikasi WPF klien, dan infrastruktur layanan WCF / SQL, kemudahan penggunaan (terutama dalam hal sintaksis yang jelas dan ringkas), dokumentasi yang konsisten, dukungan dan kinerja komunitas yang baik adalah semua faktor penting dalam pilihan saya.
Memperbarui:
Sumber daya dan pertanyaan rangkap yang dikutip tampaknya sudah ketinggalan zaman, dapatkah seseorang dengan pengetahuan tentang semua kerangka kerja ini maju dan memberikan beberapa wawasan nyata?
Saya menyadari bahwa sebagian besar pendapat tentang hal ini cenderung bias, tetapi saya berharap seseorang telah meluangkan waktu untuk mempelajari semua kerangka kerja ini dan setidaknya memiliki perbandingan objektif secara umum.
Saya cukup bersedia untuk melakukan penyelidikan sendiri jika ini belum dilakukan sebelumnya, tetapi saya berasumsi ini adalah sesuatu yang setidaknya sudah dilakukan beberapa orang.
Pembaruan Kedua:
Jika Anda memiliki pengalaman dengan lebih dari satu wadah DI / IoC, silakan beri peringkat dan rangkum pro dan kontra dari mereka, terima kasih. Ini bukan latihan untuk menemukan semua wadah kecil yang dibuat orang, saya mencari perbandingan antara kerangka kerja populer (dan aktif).
Jawaban:
Sementara jawaban komprehensif untuk pertanyaan ini memakan ratusan halaman buku saya , berikut adalah bagan perbandingan cepat yang masih saya kerjakan:
sumber
Saya menemukan perbandingan kinerja lain (pembaruan terbaru 10 April 2014). Ini membandingkan yang berikut:
Berikut ini ringkasan singkat dari pos tersebut:
Anda juga dapat mencoba menggunakan Perpustakaan Pemilih Layanan Umum dan mudah-mudahan mencoba beberapa opsi dan melihat mana yang terbaik untuk Anda.
Beberapa informasi tentang Perpustakaan Pemilih Layanan Umum dari situs:
Memperbarui
13.09.2011: Funq dan Munq ditambahkan ke daftar kontestan. Grafik juga diperbarui, dan Spring.NET dihapus karena kinerjanya yang buruk.
04.11.2011: "tambah Simple Injector , kinerjanya yang terbaik dari semua kontestan".
sumber
Baca saja blog pembanding kontainer .Net DI yang hebat ini oleh Philip Mat.
Dia melakukan beberapa tes perbandingan kinerja menyeluruh pada;
Dia merekomendasikan Autofac karena kecil, cepat, dan mudah digunakan ... Saya setuju. Tampaknya Unity dan Ninject adalah yang paling lambat dalam pengujiannya.
sumber
Penafian: Pada awal 2015, ada banyak perbandingan fitur IoC Container dari Jimmy Bogard , berikut ringkasannya:
Kontainer yang Dibandingkan:
Skenarionya adalah ini: Saya memiliki antarmuka, IMediator, di mana saya dapat mengirim satu permintaan / tanggapan atau pemberitahuan ke beberapa penerima:
Saya kemudian membuat satu set permintaan / tanggapan / pemberitahuan:
Saya tertarik melihat beberapa hal sehubungan dengan dukungan wadah untuk obat generik:
Pengaturan untuk varian umum (mendaftarkan penangan untuk basisInotifikasi / membuat pipa permintaan) Penangan saya cukup mudah, mereka hanya menampilkan konsol:
Autofac
Tidak ada
Injector sederhana
StructureMap
Kesatuan
Windsor
sumber
Sebenarnya ada banyak kerangka kerja IoC. Sepertinya setiap programmer mencoba menulis satu di beberapa titik karir mereka. Mungkin bukan untuk menerbitkannya, tetapi untuk mempelajari cara kerja batin.
Saya pribadi lebih suka autofac karena cukup fleksibel dan memiliki sintaksis yang cocok untuk saya (walaupun saya sangat benci bahwa semua metode register adalah metode ekstensi).
Beberapa kerangka kerja lain:
sumber
RegisterControllers()
untuk MVC) jadi saya pikir merancang sekitar kasus itu bermanfaat. (Ini dirancang 5+ tahun yang lalu.)Nah, setelah melihat-lihat perbandingan terbaik yang saya temukan sejauh ini adalah:
http://www.sturmnet.org/blog/2010/03/04/poll-ioc-containers-for-net
http://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net
Itu adalah jajak pendapat yang diambil pada Maret 2010.
Satu hal yang menarik bagi saya adalah bahwa orang-orang yang telah menggunakan Kerangka DI / IoC dan suka / tidak suka, StructureMap tampaknya keluar di atas.
Juga dari jajak pendapat, tampaknya Castle.Windsor dan StructureMap tampaknya paling disukai.
Menariknya, Unity dan Spring.Net tampaknya menjadi pilihan populer yang paling tidak disukai. (Saya sedang mempertimbangkan Unity karena malas (dan lencana / dukungan Microsoft), tetapi saya akan melihat lebih dekat pada Castle Windsor dan StructureMap sekarang.)
Tentu saja ini mungkin (?) Tidak berlaku untuk Unity 2.0 yang dirilis pada Mei 2010.
Semoga orang lain bisa memberikan perbandingan berdasarkan pengalaman langsung.
sumber
Lihat perbandingan net-ioc-frameworks pada kode google termasuk linfu dan spring.net yang tidak ada dalam daftar Anda saat saya menulis teks ini.
Saya bekerja dengan spring.net: Ini memiliki banyak fitur (aop, libraries, docu, ...) dan ada banyak pengalaman dengannya di dotnet dan java-world. Fitur-fiturnya dimodulasi sehingga Anda tidak harus mengambil semua fitur. Fitur-fiturnya adalah abstraksi dari masalah umum seperti databaseabstraction, loggingabstraction. namun sulit untuk melakukan dan men-debug konfigurasi-IOC.
Dari apa yang saya baca sejauh ini: Jika saya harus memilih untuk proyek kecil atau menengah, saya akan menggunakan ninject sejak ioc-konfigurasi dilakukan dan debuggable di c #. Tapi aku belum bekerja dengannya. untuk sistem modular besar saya akan tetap dengan spring.net karena perpustakaan-abstraksi.
sumber