2017-01-19 1 views
1

Je teste Windsor.Castle pour la résolution de mes composants génériques.Enregistrement de composants génériques dans Windsor.Castle: différence de comportement entre Type.GetType et typeof

Je suis pour configurer mon conteneur avec des lignes comme les suivantes:

container.Register(Component.For(typeof(ICommand<,>)).ImplementedBy(Type.GetType("WCExp.Test.GetAllCommand`2")).Named("GetAllCommand")); 
container.Register(Component.For(typeof(ICommand<,>)).ImplementedBy(typeof(WindsorCastleExperiments.Implementations.GetAllCommand<,>)).Named("GetAllCommandOriginal")); 

Comme vous pouvez le voir ImplementedBy est fourni un type, soit par Type.GetType() ou par typeof().

Maintenant que je testais, j'ai remarqué que parfois le service enregistré n'était pas la classe d'implémentation, mais l'interface. Message d'erreur: Une erreur lors de la création de l'instance ICommand ... est abstraite. (chaîne de type complète supprimée)

Est-il possible que lors de l'utilisation de Type.GetType(), il arrive parfois de retourner une interface pour une chaîne de type donnée, même si la chaîne de type donnée est la définition de type de classe?

peut ainsi

Type.GetType("WCExp.Test.GetAllCommand`2") 

retour l'interface ICommand <,> ...?

Cela se produisait pour les classes résidant dans un assembly dépendant. Pour les classes dans le même ensemble que je la configuration de ce problème ne se présentait pas

sources complètes (encore?): https://github.com/schwarzie2478/WindsorCastleExperiments

Répondre

2

Je résolu mon problème. À la fin, cela n'avait rien à voir avec Castle. (Mais Castle permet que cela se produise):)

Type.GetType attend une chaîne de type qui inclut assemblyName pour les types qui existent en dehors de l'assembly en cours d'exécution.

Mais parce que je n'ai jamais vérifié pour voir ce que cette fonction renvoyait, je ne savais pas que l'enregistrement se passait sur une valeur nulle, ce que Castle autorise, mais l'interface est enregistrée comme service plutôt que comme une implémentation ...