2010-11-12 11 views
5

Ich führe Ninject in ein großes Chaos eines bestehenden Projekts ein. Ich möchte einen Diagnosetest schreiben, um sicherzustellen, dass alle Klassen, die Ninject am Ende erstellt, tatsächlich von Ninject gelöst werden können, ohne dass sie tatsächlich erstellt werden.Wie man leicht erkennt, ob Ninject eine Klasse auflösen kann

Der Grund, warum ich die tatsächliche Konstruktion vermeiden möchte, ist, dass viele dieser Klassen eine Tendenz haben, Datenbankoperationen in ihren Konstruktoren zu starten (seufz ja ich weiß). Sonst würde ich laufen sie einfach alle durch Get<T> mit einem try/catch

Antwort

4

Es gibt eine CanResolve Erweiterung auf IResolutionRoot (das heißt, können Sie es gegen Kernel verwenden, wenn Sie die richtigen using s an der richtigen Stelle). Es gibt eine CreateRequest, die Sie verwenden, um die Anfrage zu erstellen. Sehen Sie sich die Quellen und Tests an, wenn Sie ein Beispiel oder tiefere Informationen benötigen.

1

Ich weiß, dies ist ein alter Beitrag, aber es war der erste, den ich bei der Suche gefunden habe, wie man eine Klasse durch Ninject lösen kann, ohne get() aufzurufen und eine Ausnahme zu riskieren.

Ninject Version 3.0.2 haben eine Methode CanResolve, die einen Booleschen Wert zurück:

kernel.CanResolve<T>() 

Ich habe 3.0.2 von nuget aber sein Markt derzeit instabil (Ninject.3.0.2-unstable-9037), damit ich Bin mir nicht sicher, ob ich das noch in der Produktion verwende.

+1

Leider 'CanResolve' nicht in den Auflösungsbaum. Also, wenn es eine Bindung für eine Abhängigkeit zweiter Ordnung fehlt, wird es Ihnen nicht sagen. –

Verwandte Themen