Kerangka kerja .NET Dependency Injection mana yang layak dilihat? [Tutup]


386

Kerangka kerja Injeksi Ketergantungan NET C # /. Mana yang layak dilihat? Dan apa yang bisa Anda katakan tentang kerumitan dan kecepatannya.


13
Tolok Ukur Kontainer IoC - Perbandingan kinerja memiliki tabel perbandingan kinerja dan fitur untuk 20+ produk dan menjadikannya terbaru. Ini merekomendasikan Simple Injector
Michael Freidgeim

Saya menghargai Ninject & Maestro. Saya senang bahwa jawaban berperingkat teratas merujuk Ninject sebagai "kesenangan mutlak"
Razvan Dumitru

6
Saya menekankan bahwa sebelum Anda melihat ke wadah IoC, Anda harus mengelola tanpa wadah. Lakukan pengkabelan dan injeksi secara manual, itu tidak terlalu rumit atau membutuhkan banyak kode sama sekali kecuali Anda memiliki beberapa sistem yang sangat rumit atau besar. Ketika Anda merasa bahwa Anda memahaminya dan itu menjadi sulit, Anda akan lebih cocok untuk memahami kerangka kerja apa yang akan membantu Anda. tetapi tidak ada aturan yang mengatakan bahwa suatu proyek HARUS memiliki wadah IoC hanya untuk dapat melakukan DI dengan benar.
Sara

1
Mulailah dengan tidak ada. Buat grafik objek yang diperlukan secara manual. Kerangka kerja yang berbeda memiliki pendekatan berbeda yang tergantung pada kebutuhan Anda. Sebelum memilih satu, Anda perlu mengenali fitur mana yang paling Anda butuhkan.
Fabio

Karena dotnetcore adalah masa depan, Anda mungkin juga tetap menggunakan dukungan DI bawaannya. Ini sangat bagus dan sangat dapat dikustomisasi.
ATL_DEV

Jawaban:


340

edit (bukan oleh penulis): Ada daftar lengkap kerangka kerja IoC yang tersedia di https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :

  • Castle Windsor - Castle Windsor adalah yang terbaik dari wadah pembalikan yang matang dan matang yang tersedia untuk .NET dan Silverlight
  • Unity - Wadah injeksi ketergantungan ringan yang dapat diperpanjang dengan dukungan untuk injeksi konstruktor, properti, dan metode panggilan
  • Autofac - Kontainer .NET IoC yang adiktif
  • DryIoc - Sederhana, cepat semua wadah IoC berfitur lengkap.
  • Ninject - The ninja dari injector ketergantungan NET
  • StructureMap - Kontainer IoC / DI asli untuk .Net
  • Spring.Net - Spring.NET adalah kerangka kerja aplikasi sumber terbuka yang membuat membangun aplikasi .NET perusahaan lebih mudah
  • LightInject - Wadah IoC yang sangat ringan
  • Simple Injector - Simple Injector adalah perpustakaan Dependency Injection (DI) yang mudah digunakan untuk .NET 4+ yang mendukung Silverlight 4+, Windows Phone 8, Windows 8 termasuk aplikasi Universal dan Mono.
  • Microsoft.Extensions.DependencyInjection - Wadah IoC default untuk aplikasi ASP.NET Core.
  • Scrutor - Majelis memindai ekstensi untuk Microsoft.Extensions.DependencyInjection.
  • VS MEF - Managed Extensibility Framework (MEF) implementasi yang digunakan oleh Visual Studio.
  • TinyIoC - Pembalikan Kontainer Kontrol yang mudah digunakan, tidak repot, untuk proyek kecil, perpustakaan, dan pemula.

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 .


1
Sangat menyenangkan untuk melihat kualitas, dipikirkan dengan baik jawaban naik tentang satu baris. Anda meyakinkan saya untuk memeriksa StructureMap.
Chris Marasti-Georg

7
Bagus tapi jujur ​​- Windsor memiliki antarmuka lancar yang sangat bagus sekarang juga.
Krzysztof Kozmic

Bisakah Anda menjelaskan apa saja yang disediakan oleh "kerangka kerja manfaat lain" yang diberikan IoC selain implementasi DI yang mudah?
fearofawhackplanet

@fearofawhackplanet, satu-satunya hal yang dapat dilakukan wadah IoC yang tidak dapat dilakukan dengan DI orang miskin adalah Interception . Ringkasan yang bagus di sini: kenneth-truyers.net/2013/05/16/...
Mathieu Guindon

1
Saya telah membaca beberapa sumber yang mengatakan bahwa Ninject adalah palmmedia.de/blog/2011/8/30/… paling lambat dan stackoverflow.com/questions/4581791/…
Luke T O'Brien

77

Itu tergantung pada apa yang Anda cari, karena mereka masing-masing memiliki pro dan kontra.

  1. Spring.NETadalah 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, dll
  2. Castle Windsoradalah 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.
  3. Structure Map memiliki konfigurasi yang sangat kaya dan berbutir halus melalui DSL internal.
  4. Autofacadalah 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.
  5. Ninject Saya telah mendengar lebih banyak tulang yang telanjang dengan pendekatan yang lebih sedikit (mendengar tidak berpengalaman).
  6. Diskriminator terbesar Unityadalah: 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.


4
Autofac sebenarnya tidak begitu baru, itu lebih tua dari Unity :)
Nicholas Blumhardt

1
Apakah saya mengatakan itu lebih baru dari Unity? Saya katakan ini dari zaman baru ... yaitu maksud saya sifatnya fungsional. OK, apa yang saya katakan itu masih sangat baru, apa yang saya maksudkan adalah sifatnya bukan bahwa IT itu baru. :-)
Glenn Block

2
@ Krzysztof - Saya menemukan Unity mati mudah (setidaknya ketika dikonfigurasi dengan lancar dalam kode). Apa yang menurut Anda menyakitkan?
TrueWill


6
Berikut ini adalah tolok ukur kinerja yang menarik: palmmedia.de/Blog/2011/8/30/…
Steven


18

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.


1
Ninject populer tetapi tentu saja TIDAK cepat. Ini sebenarnya salah satu yang paling lambat di luar sana: palmmedia.de/Blog/2011/8/30/…
Serj Sagan

13

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.


4
Berhati-hatilah ada yang menganggap locator layanan sebagai anti-pola, termasuk seseorang yang menggunakannya untuk beberapa waktu dan bahkan menulis perpustakaan untuk itu: blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern
Philippe

4
Steven juga pencipta Simple Injector ... jadi ini semacam jawaban spam ... terutama dia menggunakan akun alt untuk melakukannya ... Simple Injector cukup cepat: palmmedia.de/Blog/2011/
8/30

8

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.



5

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.


4

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.


2

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!


2

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.


Mengapa Anda mengatakan itu cepat ??? Ini adalah salah satu yang paling lambat! palmmedia.de/Blog/2011/8/30/…
Serj Sagan

2

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.