2010-11-12 16 views
5

Ninject'i mevcut bir projenin büyük karmaşasına sokuyorum. Ninject'in oluşturulacak bütün sınıflarının aslında aslında hiçbirini oluşturmadan Ninject tarafından çözülebileceğinden emin olmak için bir teşhis testi yazmak istiyorum.Ninject'in bir sınıfı çözüp çözemeyeceğini kolayca söylerim

Gerçek yapıdan kaçınmak istememin nedeni, bu sınıfların çoğunun yapıcılarında veritabanı işlemlerini başlatma eğiliminde olmalarıdır (içim evet biliyorum). Aksi takdirde sadece bir try/catch

cevap

4

IResolutionRoot (eğer yerde doğru using s varsa yani sen Kernel karşı kullanabiliriz) üzerinde CanResolve uzantısı var olan Get<T> aracılığıyla hepsini aday olacağını. İsteği oluşturmak için kullandığınız CreateRequest var. Bir örneğe veya daha derin bir bilgiye ihtiyacınız varsa, kaynaklara ve testlere bakın.

1

Bunun eski bir yazı olduğunu biliyorum, ancak aslında get() ve bir istisnayı riske atmadan bir sınıfın Ninject tarafından çözülüp çözülmeyeceğini bulmak için arama yaparken bulduğum ilk şeydi.

Ninject sürüm 3.0.2

bir boolean döndüren bir yöntem CanResolve vardır:

kernel.CanResolve<T>() 

ben Nuget den 3.0.2 var ama onun şu anda kararsız (Ninject.3.0.2-kararsız-9037) pazarlamak yüzden Bunu henüz üretimde kullanıp kullanmadığımı bilmiyorum.

+1

Talihsizce, CanResolve, çözünürlük ağacına bakmıyor. Yani eğer ikinci dereceden bir bağımlılığa bağlanma eksikse, size söylemez. –