2010-08-22 14 views
2

Comment puis-je trouver quelle classe est actuellement lié à la classe abstraite avec Ninject dans l'exemple suivant:Trouver quelle classe une classe abstraite est liée aux Ninject

if(conditional) 
    Bind<IProducts>().To<Products>(); 
else 
    Bind<IProducts>().To<SqlProducts>(); 
Type currentType = 'Type based upon current binding of IProducts' 

Comment puis-je obtenir la valeur de currentType.

Répondre

2

Kernel.Resolve est le point d'entrée bas niveau dans la machine de résolution que vous recherchez - il ne va pas jusqu'à l'instanciation des objets.

Je suggère de télécharger le tronc , y compris les tests et vous obtiendrez des exemples qui couvrent votre scénario exact. Ne traitez pas cela comme un jetable - les tests sont des tests xUnit.net propres qui sont exemplaires en termes d'être court, concentré et ayant une bonne couverture.

Vous pouvez également trouver Kernel.Get<T>().GetType()/Kernel.TryGet<T>().GetType() ou Kernel.GetAll<T> pour être d'utilisation, selon votre scénario exact - si vous pouvez développer même, je peux faire cette réponse plus précise (mais tous ces instancier l'objet plutôt que de vous laisser interroger les liaisons à un niveau bas.

+1

Merci pour votre réponse et des conseils supplémentaires. Ceci est vraiment ce que je avais besoin était les échantillons puisque je ne l'ai pas trouvé beaucoup exemples autres que pour les contrôleurs Mvc – Mike

1
kernel.Get<IProducts>().GetType() 

m'a donné le type correct lors de l'exécution.

+0

(Obv dès que vous obtenez assez de points s, des trucs comme ça devraient être enregistrés comme un commentaire, mais alors vous le saviez!). Faites juste attention à ce que l'appel que vous faites aboutisse à une instanciation de la classe (en supposant que vous n'utilisez pas une portée dans laquelle une instance a déjà été créée) comme couvert dans [une autre réponse il y a quelques heures] (http://stackoverflow.com/questions/3543565/ninject-is-binding-stuff-behind-my-back/3546032#3546032)). Cela peut ou peut ne pas être un problème pour vous. –