2010-11-12 18 views
5

Voy a presentar a Ninject en un gran lío de un proyecto existente. Quiero escribir una prueba de diagnóstico para asegurarme de que todas las clases que terminará creando Ninject realmente puedan ser resueltas por Ninject ... sin realmente crear ninguna de ellas.Cómo saber fácilmente si Ninject puede resolver una clase

La razón por la que quiero evitar la construcción real es que muchas de estas clases tienen una tendencia a iniciar las operaciones de la base de datos en sus constructores (suspiro sí, lo sé). De lo contrario sería simplemente correr a todos ellos a través Get<T> con un try/catch

Respuesta

4

Hay una extensión CanResolve en IResolutionRoot (es decir, se puede usar contra Kernel si usted tiene el derecho using s en su lugar). Hay un CreateRequest que usa para crear la solicitud. Eche un vistazo a las fuentes y las pruebas si necesita un ejemplo o información más profunda.

1

Sé que esta es una publicación anterior, pero fue la primera que encontré al buscar cómo encontrar si Ninject puede resolver una clase sin llamar realmente a get() y arriesgar una excepción.

versión 3.0.2 Ninject tienen una CanResolve método que devuelve un valor lógico:

kernel.CanResolve<T>() 

llegué 3.0.2 de Nuget pero su actualidad mercado inestable (Ninject.3.0.2-inestable-9037) por lo que No estoy seguro si uso esto en producción todavía.

+1

Desafortunadamente, 'CanResolve' no mira en el árbol de resolución. Entonces, si falta un enlace en una dependencia de segundo orden, no se lo dirá. –

Cuestiones relacionadas