2017-07-09 1 views
0

ContexteComment accéder à toutes les instances créées dans Ninject?

Ceci est un scénario de test unitaire. Les méthodes de la classe cible de test peuvent être appelées simultanément à partir de différents threads. Ainsi, au lieu de protéger l'instance d'implémentation de l'enregistreur elle-même avec des verrous, j'ai choisi d'avoir des enregistreurs singleton liés par threads. Les méthodes sous test créent toujours leurs enregistreurs liés par thread via le modèle de localisateur de service (veuillez ne pas détourner la question à propos de est-ce un antipattern ou non).

Ninject est programmé comme suit dans la Arrangez partie du test:

kernel.Bind<ILogger>().To<MyLogger>().InThreadScope(); 

Question

Au cours de la partie loi du test, un ou plusieurs fils est créé par l'instance en cours de test (à l'intérieur).

Dans la partie Assert du test, je voudrais accéder aux un ou plusieurs enregistreurs créés par les threads de la classe testée, et examiner ces enregistreurs dans le but d'une assertion.

Comment puis-je accomplir cette tâche? (accéder aux enregistreurs ce qui a été créé)

Répondre

1

Ninject n'offre pas d'API spécifique pour cela, cependant, vous pouvez utiliser "OnActivation".

Soit l'ajouter à votre liaison existante ou utiliser Rebind dans le test unitaire, comme suit:

kernel.Rebind<ILogger>().To<MyLogger>().OnActivation(createdInstance => ...do something...); 

Remplacer le « ... faire quelque chose ... » avec un Action<ILogger> qui ajoute l'instance une liste (concurrency-safe?) ou similaire. Pour plus d'informations, voir Intercept creation of instances in Ninject pour plus d'informations.