Hangi .NET Bağımlılık Enjeksiyon çerçeveleri incelenmeye değer? [kapalı]


386

Hangi C # /. NET Bağımlılık Enjeksiyon çerçeveleri incelenmeye değer? Ve karmaşıklıkları ve hızları hakkında ne söyleyebilirsiniz?


13
IoC Container Benchmark - Performans karşılaştırması , 20+ ürün için performans ve özellik karşılaştırma tablolarına sahiptir ve onları güncel tutar. Basit Enjektör
Michael Freidgeim

Ninject ve Maestro'yu takdir ediyorum. En yüksek puanlı cevap Ninject'i "mutlak bir zevk" olarak kabul etmekten mutluluk duyuyorum
Razvan Dumitru

6
IoC konteynırlarına bakmadan önce, biri olmadan yönetmeniz gerektiğini vurguluyorum. Kablolama ve enjeksiyonunuzu manuel olarak yapın, gerçekten karmaşık veya büyük sistemleriniz yoksa, gerçekten karmaşık değildir veya çok fazla kod gerektirmez. Anladığınızı ve bunun yanıcı hale geldiğini hissettiğinizde, ne tür bir çerçevenin size yardımcı olduğunu anlamak için daha iyi olacaksınız. ancak bir projenin DI'yi düzgün bir şekilde yapabilmesi için bir IoC konteyneri olması GEREKİR diye bir kural yoktur.
sara

1
Hiçbiri ile başlayın. Gerekli nesneler grafiğini elle oluşturun. Farklı çerçevelerin ihtiyaçlarınıza bağlı farklı yaklaşımları vardır. Birini seçmeden önce en çok hangi özelliklere ihtiyacınız olduğunu bilmeniz gerekir.
Fabio

Dotnetcore gelecek olduğundan, dahili DI desteği ile de bağlı kalabilirsiniz. Çok iyi ve son derece özelleştirilebilir.
ATL_DEV

Yanıtlar:


339

edit (yazar tarafından değil): https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc adresinde kapsamlı bir IoC çerçevesi listesi bulunmaktadır :

  • Castle Windsor - Castle Windsor, .NET ve Silverlight için mevcut olan en iyi cins, olgun İnversiyon Kontrol konteyneri
  • Unity - Yapıcı, özellik ve yöntem çağrısı enjeksiyonu desteği ile hafif, genişletilebilir bağımlılık enjeksiyon kabı
  • Autofac - Bağımlılık yapan bir .NET IoC kapsayıcısı
  • DryIoc - Basit, hızlı tüm özelliklere sahip IoC konteyneri.
  • Ninject - .NET bağımlılık enjektörlerinin ninjası
  • StructureMap - .Net için orijinal IoC / DI Kapsayıcısı
  • Spring.Net - Spring.NET, kurumsal .NET uygulamaları oluşturmayı kolaylaştıran açık kaynaklı bir uygulama çerçevesidir
  • LightInject - Ultra hafif IoC kabı
  • Basit Enjektör - Basit Enjektör, .NET 4+ için Silverlight 4+, Windows Phone 8, Evrensel uygulamalar ve Mono dahil Windows 8'i destekleyen kullanımı kolay bir Bağımlılık Enjeksiyonu (DI) kütüphanesidir.
  • Microsoft.Extensions.DependencyInjection - ASP.NET Core uygulamaları için varsayılan IoC kapsayıcısı.
  • Scrutor - Microsoft.Extensions.DependencyInjection için derleme tarama uzantıları.
  • VS MEF - Visual Studio tarafından kullanılan Yönetilebilir Genişletilebilirlik Çerçevesi (MEF) uygulaması.
  • TinyIoC - Küçük projeler, kütüphaneler ve yeni başlayanlar için kullanımı kolay, sorunsuz, Kontrol Konteynerinin İnversiyonu.

Orijinal cevap aşağıdadır.


Burada biraz seçici olabileceğimi düşünüyorum ama DI (Bağımlılık Enjeksiyonu) 'nun bir programlama modeli olduğunu ve bir IoC (Kontrolün İnversiyonu) çerçevesi tarafından kolaylaştırıldığını, ancak gerektirmediğini belirtmek önemlidir. IoC çerçeveleri DI'yi çok daha kolay hale getirir ve DI'nin üzerinde ve üstünde başka avantajlar sağlar.

Olduğu söyleniyor, eminim sorduğunuz şey buydu. IoC Frameworks Hakkında; Ben kullanmayı kullanılan Spring.Net ve CastleWindsor çok ama arkasında gerçek ağrı sen yazma zorunda tüm bu sinir bozucu XML yapılandırma oldu! Onlar kullanıyoruz böylece hemen hemen tüm şimdi bu şekilde taşıyoruz StructureMap geçen yıl kadar ve kesinlikle yazılı jenerikleri ve kayıt kullanılarak akıcı yapılandırma taşındı beri, IoC kullanarak acım bariyer düşmüştür sıfırın altında! IoC yapılandırmamın derleme zamanında (çoğunlukla) kontrol edildiğini ve mutlak bir şeye sahip olduğumu bilmenin mutlak bir tekme var ve StructureMap ve hızı ile sevinçten başka bir şeyim olmadı. Diğerlerinin çalışma zamanında yavaş olduğunu söylemeyeceğim, ancak benim için kurulumu daha zor ve hayal kırıklığı genellikle günü kazandı.

Güncelleme

Ninject'i en son projemde kullanıyorum ve kullanmak mutlak bir zevkti. Kelimeler burada beni biraz başarısızlığa uğrattı, ama (İngiltere'de söylediğimiz gibi) bu çerçeve 'Köpekler'. Hızlı bir şekilde hazır ve çalışır hale gelmek istediğiniz yeşil alan projeleri için kesinlikle tavsiye ediyorum. İhtiyacım olan her şeyi Justin Etheredge'nin Ninject ekranlarından aldım . Mevcut kod içine retro-uydurma Ninject hiç bir sorun olduğunu göremiyorum, ama sonra aynı deneyimlerime StructureMap söylenebilir . Bu ikisi arasında ileriye dönük zor bir seçim olacak, ama durgunluktan daha çok rekabete girmeyi tercih ederim ve orada iyi bir miktar sağlıklı rekabet var.

Diğer IoC ekran görüntülerini Dimecasts'de de bulabilirsiniz .


1
Bir astar hakkında kaliteli, iyi düşünülmüş bir cevap artışı görmek harika. Beni StructureMap'a bakmaya ikna ettin.
Chris Marasti-Georg

7
Güzel ama adil olmak gerekirse - Windsor şimdi de çok güzel bir tam teşekküllü akıcı arayüze sahip.
Krzysztof Kozmic

IoC çerçevelerinin DI'nin kolay uygulanmasının yanı sıra sağladığı "diğer faydalar" ne açıklayabilir misiniz?
fearofawhackplanet

@fearofawhackplanet bir IoC konteyner bunu yapabilir tek şeylerden biri ile yapılamaz yoksul adamın DI olduğunu Kesişme . İyi özet burada: kenneth-truyers.net/2013/05/16/…
Mathieu


77

Her birinin artıları ve eksileri olduğu için ne aradığınıza bağlıdır.

  1. Spring.NETJava dünyasından Bahar gelince en olgun. Spring, Web, Windows vb. Destekleyecek şekilde genişleten çok zengin bir çerçeve kitaplığı kümesine sahiptir.
  2. Castle Windsor.NET platformunda en yaygın kullanılanlardan biridir ve en büyük ekosisteme sahiptir, son derece yapılandırılabilir / genişletilebilir, özel ömür yönetimi, AOP desteği, doğasında bulunan NHibernate desteğine sahiptir ve harika bir konteynerdir. Windsor, Monoray, Aktif Kayıt, vb. İçeren bir yığının bir parçasıdır. NHibernate, Windsor üzerine inşa edilir.
  3. Structure Map dahili DSL sayesinde çok zengin ve ince taneli bir konfigürasyona sahiptir.
  4. Autofacdoğası gereği işlevsel programlama desteği ile yeni çağın bir IoC konteyneri. Ayrıca, yaşam boyu yönetimi konusunda diğerlerinden farklı bir yaklaşım gerektirir. Autofac hala çok yeni, ancak IoC ile mümkün olanın üstesinden geliyor.
  5. Ninject Duydum daha az kemik ile daha az kemik daha fazla yaklaşım (duyulmamış duydum).
  6. En büyük ayrımcı Unity: Microsoft'tan (p & p) destekleniyor. Birlik çok iyi bir performansa ve harika belgelere sahiptir. Ayrıca son derece yapılandırılabilir. Kale / Yapı Haritasının tüm çan ve ıslıklarına sahip değil.

Özet olarak, gerçekten sizin için neyin önemli olduğuna bağlıdır. Hangisinin uyduğunu değerlendirme ve görme konusunda başkalarıyla aynı fikirdeyim. Güzel bir şey, sadece bir jöle sahip olmak yerine çörek güzel bir seçim var.


4
Autofac aslında çok yeni değil, Birlikten daha eski :)
Nicholas Blumhardt

1
Birlikten daha yeni olduğunu mu söyledim? Yeni bir çağ olduğunu söyledim ... yani demek istediğim işlevsel doğası. Tamam, söylediklerim hala çok yeni, demek istediğim, BT'nin yeni olması değil doğasıydı. :-)
Glenn Block

2
@Krzysztof - Birliğin ölü olduğunu kolay buluyorum (en azından kodda akıcı bir şekilde yapılandırıldığında). Acı veren ne buldun?
TrueWill


6
İşte ilginç bir performans ölçütü: palmmedia.de/Blog/2011/8/30/…
Steven


18

Ninject harika. Gerçekten hızlı görünüyor, ama hiç karşılaştırma yapmadım. Yazar Nate, Ninject ve diğer DI çerçeveleri arasında bazı karşılaştırmalar yaptığını biliyorum ve Ninject'in hızını artırmak için daha fazla yol arıyor.

Saygı duyduğum birçok kişinin StructureMap ve CastleWindsor hakkında iyi şeyler söylediğini duydum. Bunlar, bence şu anda bakılacak en büyük üç.


1
Ninject popüler ama kesinlikle hızlı DEĞİL. Aslında oradaki en yavaşlardan
Serj Sagan

13

Kullandığım Basit Enjektör :

Basit Enjektör, çözümlerinizi başarı çukuruna doğru yönlendirmek için en iyi uygulamaları kullanan kolay, esnek ve hızlı bağımlı bir enjeksiyon kütüphanesidir.


4
Bazılarına servis bulucuyu
Philippe

4
Steven aynı zamanda Simple Injector'ın da yaratıcısı ... bu yüzden bu tür bir spam cevabı ... özellikle bunu yapmak için başka bir hesap kullandı ... Simple Injector oldukça hızlı olsa da: palmmedia.de/Blog/2011/
8/30

8

Ben büyük bir Castle hayranıyım. IoC Container'ın öyküsünün ötesinde sağladığı tesisleri de seviyorum. Gerçekten NHibernate, logging, AOP, vb kullanarak basit . Ben de Boo ile yapılandırma için Binsor kullanın ve bu yüzden bir dil olarak Boo gerçekten aşık oldum.



5

Bir günün en iyi kısmını, en basit Spring.NET örneğinin çalışmasını sağlamak için başarılı olmadan mücadele ederek geçirdim. XML dosyasından derlememi nasıl bulacağımı asla anlayamadım. Öte yandan, yaklaşık 2 saat içinde, hem NUnit hem de MSTest ile test entegrasyonu da dahil olmak üzere Ninject'i çalıştırabildim.


4

Ben kullandım Spring.NET geçmişte ve onunla büyük bir başarı elde etti. Kullandığımız proje tek başına oldukça ağır olmasına rağmen, bununla ilgili önemli bir ek yük fark etmedim. Kurulumu elde etmek sadece belgeleri okumak için biraz zaman aldı .


2

C # ile ilgili en iyi şey, yıllar önce Java geliştiricileri tarafından dövülen bir yolu takip etmesidir. Bu nedenle, genellikle bu nitelikteki araçları ararken tavsiyem, sağlam Java yanıtını aramak ve henüz bir .NET uyarlaması olup olmadığını görmek.

Yani DI söz konusu olduğunda (ve orada çok fazla seçenek varsa, bu gerçekten bir zevk meselesidir) Spring.NET . Ayrıca, projelerin arkasındaki insanları araştırmak her zaman akıllıca olacaktır. Eric Sink'e saygı duyduğum için SourceGear ürünlerini (bunları kullanma dışında) kaynak kontrolü için öneren bir sorunum yok. Mark Pollack'in konuştuğunu gördüm ve ne diyebilirim ki, adam sadece anlıyor.

Sonunda, çok sayıda DI çerçevesi var ve en iyi bahis, bunlardan birkaçı ile bazı örnek projeler yapmak ve eğitimli bir seçim yapmak.

İyi şanslar!


2

Bence başlamak için iyi bir yer Ninject ile, yeni ve ince ayar bir sürü dikkate aldı ve gerçekten hızlı. Geliştirici, Nate'in gerçekten harika bir sitesi ve büyük desteği var.


Neden hızlı olduğunu söylüyorsun ??? Var olan en yavaşlardan biri! palmmedia.de/Blog/2011/8/30/…
Serj Sagan

2

Spring.Net oldukça sağlam, ancak belgelerin gözden geçirilmesi biraz zaman aldı. Autofac iyidir ve .Net 2.0 desteklenirken, derlemek için VS 2008'e ihtiyacınız vardır veya uygulamanızı oluşturmak için komut satırını kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.