La spécification d'arguments de type n'est pas une chose d'exécution, elle est compilée statiquement. Le type doit être connu au moment de la compilation. Dans votre scénario, il est potentiellement inconnu ou calculé lors de l'exécution. Grâce à la réflexion, il est possible de construire un appel de méthode où vous spécifiez les arguments de type, mais il est peu probable que vous vouliez le faire.
En outre, la plupart des conteneurs doivent avoir une surcharge qui ressemblerait à quelque chose comme ceci:
Type ninjaType = typeof(Ninja);
var ninja = (Ninja)ninject.Get(ninjaType);
Enfin, la plupart des conteneurs doivent fournir des moyens de spécifier dans la configuration du conteneur, quel type doit être fourni sur certaines conditions. Je sais que Ninject a un joli DSL pour spécifier conditionnellement quel type devrait être retourné dans quelles circonstances. Cela signifierait cependant, de coder par rapport à une abstraction et de laisser le conteneur décider ce qui est retourné:
class DependencyConsumer {
ctor(IWarrior warrior) {
//Warrior could be a ninja, because e.g. you told NInject
//that the dependency should be filled that way for this class
}
}
Qu'est-ce qui est avec le downvote? Ma question n'est pas claire - ou trop stupide? Si c'était par la personne qui a supprimé sa réponse downvoted; ce n'est pas moi qui vous ai donné cette downvote .. – stiank81
Idem mon commentaire sur http://stackoverflow.com/questions/2620600/specifying-type-when-resolving-objects-through-ninject/2620636#2620636. Upvoting. Je ne sais pas si je l'aurais forcément mis à jour sans cette absurdité mais c'est une question non-dup bien formulée donc +1 –