2010-11-12 7 views
5

J'introduis Ninject dans un grand désordre d'un projet existant. Je veux écrire un test de diagnostic pour m'assurer que toutes les classes que Ninject va créer peuvent être réellement résolues par Ninject ... sans en créer aucune.Comment savoir facilement si Ninject peut résoudre une classe

La raison pour laquelle je veux éviter la construction réelle est que beaucoup de ces classes ont tendance à démarrer des opérations de base de données dans leurs constructeurs (sigh oui je sais). Sinon, je voudrais juste faire fonctionner tout au long de Get<T> avec un try/catch

Répondre

4

Il y a une extension CanResolve sur IResolutionRoot (à savoir, vous pouvez l'utiliser contre Kernel si vous avez les using droit en place). Il y a un CreateRequest que vous utilisez pour créer la demande. Jetez un oeil dans les sources et les tests si vous avez besoin d'un exemple ou des informations plus approfondies.

1

Je sais qu'il s'agit d'un ancien article, mais c'était le premier que j'ai trouvé en cherchant comment trouver une classe pouvant être résolue par Ninject sans appeler get() et risquer une exception.

Ninject 3.0.2 ont une CanResolve méthode qui retourne un booléen:

kernel.CanResolve<T>() 

Je suis 3.0.2 de NuGet mais son marché actuellement instable (Ninject.3.0.2 instable-9037) donc je Je ne suis pas sûr si je l'utilise dans la production pour le moment.

+1

Malheureusement, 'CanResolve' ne regarde pas dans l'arbre de résolution. Donc, s'il manque une liaison sur une dépendance de second ordre, cela ne vous le dira pas. –