ASP.net MVC kullanıyoruz.
Bunlardan hangisi en iyi DI çerçevesi Ninject veya Unity'dir ve neden?
ASP.net MVC kullanıyoruz.
Bunlardan hangisi en iyi DI çerçevesi Ninject veya Unity'dir ve neden?
Yanıtlar:
İkisine en son baktığımda Ninject'i biraz daha iyi buldum. Ancak ikisinin de dezavantajları var.
Ninject daha iyi bir akıcı konfigürasyon şemasına sahiptir. Unity, çoğunlukla XML yapılandırmasına dayanıyor gibi görünüyor. Ninject'in ana dezavantajı, [Inject] nitelikleri eklemek için kodunuzun her yerinde Ninject.Core'a başvurmanızı gerektirmesidir.
Sorabilirsem, neden seçimlerinizi bu ikisiyle sınırlıyorsunuz? Bence Castle.Windsor, Autofac ve StructureMap en az onun kadar iyi ya da daha iyi.
Bunun eski bir soru olduğunu biliyorum ama işte düşüncelerim:
Ben şahsen Ninject'i seviyorum. Akıcı arayüzleri ve XML'den kaçınmayı seviyorum. Genelde XML'i severim, sadece bu tür yapılandırma işleri için değil. Özellikle yeniden düzenleme söz konusu olduğunda, akıcı arayüzler düzeltmeyi kolaylaştırır.
StructureMap'in ObjectFactory'sini özlüyorum, ancak bunu Ninject'e eklemek için kolay çözümler var.
Jeffery'nin belirttiği gibi, yalnızca bir kurucunuz olduğunda [Enjekte] özelliğini kullanmak zorunda değilsiniz.
Akıcı arayüzleri sadece XML'den kaçındıkları için değil, onları etkileyen bir şeyi değiştirdiğimde derleme zamanı hatalarına neden oldukları için tercih ettiğimi fark ettim. XML yapılandırması olmuyor ve ne kadar az hatırlamam gerekiyorsa o kadar iyi durumdayım.
Mendelt'e katılıyorum, "en iyi" DI çerçevesi yok. Bu sadece duruma bağlıdır ve hepsinin artıları ve eksileri vardır. David Hayden, DotNet Rocks'ta EntLib'in geri kalanını kullanıyorsanız ve buna aşina iseniz Unity'nin tercih edilen seçenek olduğunu söyledi. Ben şahsen Unity kullanıyorum çünkü müşterim Microsoft DLL'lerde Enterprise Library (Unity) yazmasını , eğer söylediğimi anlarsanız.
Arayüzleri ve somut uygulamalarını kurmak için hem xml yapılandırmasını kullanıyorum, ancak daha sonra enjekte ederken kodda öznitelikleri kullanıyorum, örneğin:
<type type="ILogger" mapTo="EntLibLogger">
<lifetime type="singleton"/>
</type>
ve kodda:
[InjectionConstructor]
public Repository([Dependency] ILogger logger)
Şahsen ben bunun ne olduğunu daha net hale getirdiğini düşünüyorum, ancak elbette başvurunuzun her yerinde birliğe atıfta bulunacağınız iddia edilebilir. Sana kalmış.
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
Birlik daha hızlı ama en iyisi değil