Créer un objet en ne connaissant que le nom de la classe?

J'ai un ensemble de classes, chacune est différente stratégie pour faire le même travail.

namespace BigCorp.SuperApp
{
    public class BaseClass { }
    public class ClassA : BaseClass { }
    public class ClassB : BaseClass { }
}

Le choix de la stratégie à utiliser est configurable. Je veux configurer uniquement le nom de la classe 'ClassB" au lieu du nom complet du type 'BigCorp.SuperApp.ClassB " dans l'application.fichier de configuration.

<appConfig>
   <SuperAppConfig>
      <Handler name="ClassB" />
   </SuperAppConfig>
</appConfig>

Cependant, la réflexion échouent parce qu'ils attendent le nom complet du type, en particulier

Type t = Type.GetType("ClassB"); //results in t == null
BaseClass c = Activator.CreateInstance(t) as BaseClass; //fails

Comment puis-je obtenir que cela fonctionne lors de la configuration seulement le nom de la classe? Concaténer l'espace de noms pour le nom de la classe pour le nom complet du type? Est-il un autre appel de réflexion qui fonctionne?

Si vous pensez que c'est inutile et je devrais attendre la configuration pour contenir le nom complet du type, je suis ouvert à cette solution! Il suffit de fournir la justification de me convaincre.

(Je ne vais pas être le chargement d'un type à partir de l'extérieur de cette assemblée/espace de noms)

source d'informationauteur Anthony Mastrean | 2008-11-17