Kerangka kerja Injeksi Ketergantungan NET C # /. Mana yang layak dilihat? Dan apa yang bisa Anda katakan tentang kerumitan dan kecepatannya.
Kerangka kerja Injeksi Ketergantungan NET C # /. Mana yang layak dilihat? Dan apa yang bisa Anda katakan tentang kerumitan dan kecepatannya.
Jawaban:
edit (bukan oleh penulis): Ada daftar lengkap kerangka kerja IoC yang tersedia di https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
Jawaban asli berikut.
Saya kira saya mungkin agak pilih-pilih di sini, tetapi penting untuk dicatat bahwa DI (Dependency Injection) adalah pola pemrograman dan difasilitasi oleh, tetapi tidak memerlukan, kerangka kerja IoC (Inversion of Control). Kerangka kerja IoC hanya membuat DI jauh lebih mudah dan mereka memberikan sejumlah manfaat lainnya di atas dan di atas DI.
Yang sedang berkata, saya yakin itu yang Anda tanyakan. Tentang Kerangka Kerja IoC; Saya biasa menggunakan Spring.Net dan CastleWindsor banyak, tetapi rasa sakit yang sebenarnya di belakang adalah semua konfigurasi XML sial yang harus Anda tulis! Mereka hampir semua bergerak dengan cara ini sekarang, jadi saya telah menggunakan StructureMap selama setahun terakhir ini, dan karena sudah pindah ke konfigurasi lancar menggunakan generik dan registry yang sangat diketik, penghalang rasa sakit saya dalam menggunakan IoC telah turun ke Di bawah nol! Saya mendapatkan tendangan mutlak karena mengetahui bahwa konfigurasi IoC saya diperiksa pada waktu kompilasi (sebagian besar) dan saya tidak memiliki apa-apa selain kesenangan dengan StructureMap dan kecepatannya. Saya tidak akan mengatakan bahwa yang lain lambat saat runtime, tetapi mereka lebih sulit bagi saya untuk mengatur dan frustrasi sering menang hari itu.
Memperbarui
Saya telah menggunakan Ninject pada proyek terbaru saya dan telah menjadi kesenangan mutlak untuk digunakan. Kata-kata sedikit mengecewakan saya di sini, tetapi (seperti yang kita katakan di Inggris) kerangka ini adalah 'Anjing'. Saya akan sangat merekomendasikannya untuk setiap proyek bidang hijau di mana Anda ingin bangun dan berjalan dengan cepat. Saya mendapatkan semua yang saya butuhkan dari serangkaian screencasts Ninject fantastis oleh Justin Etheredge. Saya tidak bisa melihat retro-fitting Ninject ke dalam kode yang ada menjadi masalah sama sekali, tetapi kemudian hal yang sama dapat dikatakan tentang StructureMap dalam pengalaman saya. Ini akan menjadi pilihan sulit di antara keduanya, tapi saya lebih suka memiliki kompetisi daripada stagnasi dan ada sejumlah kompetisi sehat yang layak di luar sana.
Screencast IoC lainnya juga dapat ditemukan di sini di Dimecasts .
Itu tergantung pada apa yang Anda cari, karena mereka masing-masing memiliki pro dan kontra.
Spring.NET
adalah yang paling dewasa karena keluar dari Musim Semi dari dunia Jawa. Spring memiliki pustaka kerangka kerja yang sangat kaya yang memperluasnya untuk mendukung Web, Windows, dllCastle Windsor
adalah salah satu yang paling banyak digunakan dalam platform .NET dan memiliki ekosistem terbesar, sangat dapat dikonfigurasi / diperpanjang, memiliki manajemen kustom seumur hidup, dukungan AOP, memiliki dukungan NHibernate yang melekat dan merupakan wadah yang mengagumkan. Windsor adalah bagian dari seluruh tumpukan yang mencakup Monorail, Rekaman Aktif, dll. NHibernate sendiri dibangun di atas Windsor.Structure Map
memiliki konfigurasi yang sangat kaya dan berbutir halus melalui DSL internal.Autofac
adalah wadah IoC zaman baru dengan semua itu dukungan pemrograman fungsional yang melekat. Ini juga membutuhkan pendekatan yang berbeda dalam mengelola kehidupan dibandingkan yang lain. Autofac masih sangat baru, tetapi mendorong bilah pada apa yang mungkin dengan IoC.Ninject
Saya telah mendengar lebih banyak tulang yang telanjang dengan pendekatan yang lebih sedikit (mendengar tidak berpengalaman).Unity
adalah: dari dan didukung oleh Microsoft (p & p). Unity memiliki kinerja yang sangat baik, dan dokumentasi yang bagus. Ini juga sangat dapat dikonfigurasi. Itu tidak memiliki semua lonceng dan peluit mengatakan Castle / Struktur Map.Jadi secara ringkas, itu benar-benar tergantung pada apa yang penting bagi Anda. Saya akan setuju dengan yang lain untuk pergi dan mengevaluasi dan melihat mana yang cocok. Yang menyenangkan adalah Anda memiliki pilihan donat yang baik daripada hanya harus memiliki yang jeli.
Autofac. https://github.com/autofac/Autofac Ini sangat cepat dan cukup bagus. Berikut ini adalah tautan dengan perbandingan (dibuat setelah Ninject memperbaiki masalah kebocoran memori).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Tidak bagus. Tampaknya sangat cepat, tetapi saya belum melakukan perbandingan. Saya tahu Nate, penulis, melakukan beberapa perbandingan antara Ninject dan kerangka kerja DI lainnya dan mencari lebih banyak cara untuk meningkatkan kecepatan Ninject.
Saya telah mendengar banyak orang yang saya hormati mengatakan hal-hal baik tentang StructureMap dan CastleWindsor. Itu, dalam pikiranku, adalah tiga besar untuk dilihat sekarang.
Saya menggunakan Injector Sederhana :
Simple Injector adalah perpustakaan injeksi ketergantungan yang mudah, fleksibel, dan cepat yang menggunakan praktik terbaik untuk memandu solusi Anda menuju jurang kesuksesan.
Saya penggemar berat Castle. Saya suka fasilitas yang disediakannya di luar kisah IoC Container. Ini sangat sederhana menggunakan NHibernate, logging, AOP, dll. Saya juga menggunakan Binsor untuk konfigurasi dengan Boo dan benar-benar jatuh cinta pada Boo sebagai bahasa karenanya.
Saya dapat merekomendasikan Ninject. Ini sangat cepat dan mudah digunakan tetapi hanya jika Anda tidak memerlukan konfigurasi XML, Anda harus menggunakan Windsor.
Saya menghabiskan sebagian besar hari berjuang tanpa berhasil untuk mendapatkan contoh Spring.NET sederhana bekerja. Tidak pernah tahu bagaimana cara mendapatkannya untuk menemukan rakitan saya dari file XML. Dalam sekitar 2 jam, di sisi lain, saya bisa membuat Ninject bekerja, termasuk menguji integrasi dengan NUnit dan MSTest.
Saya telah menggunakan Spring.NET di masa lalu dan sukses besar dengannya. Saya tidak pernah melihat ada overhead yang besar dengannya, meskipun proyek yang kami gunakan cukup berat. Hanya perlu sedikit waktu membaca dokumentasi untuk membuatnya diatur.
Hal yang hebat tentang C # adalah bahwa ia mengikuti jalur yang dikalahkan oleh pengembang Java bertahun-tahun sebelumnya. Jadi, saran saya, secara umum ketika mencari alat-alat seperti ini, adalah mencari jawaban Java yang solid dan melihat apakah ada adaptasi .NET.
Jadi ketika datang ke DI (dan ada begitu banyak pilihan di luar sana, ini benar-benar masalah selera) adalah Spring.NET . Selain itu, selalu bijaksana untuk meneliti orang-orang di balik proyek. Saya tidak punya masalah menyarankan produk SourceGear untuk kontrol sumber (di luar menggunakan mereka) karena saya menghormati Eric Sink. Saya telah melihat Mark Pollack berbicara dan apa yang bisa saya katakan, orang itu mengerti.
Pada akhirnya, ada banyak kerangka kerja DI dan taruhan terbaik Anda adalah melakukan beberapa proyek sampel dengan beberapa di antaranya dan membuat pilihan yang berpendidikan.
Semoga berhasil!
Saya pikir tempat yang baik untuk memulai adalah dengan Ninject, ini baru dan telah memperhitungkan banyak penyempurnaan dan sangat cepat. Nate, pengembang, benar-benar memiliki situs hebat dan dukungan hebat.
Spring.Net cukup solid, tetapi dokumentasi membutuhkan waktu untuk mengatasinya. Autofac baik, dan sementara .Net 2.0 didukung, Anda perlu VS 2008 untuk mengkompilasinya, atau menggunakan baris perintah untuk membangun aplikasi Anda.