Question

Par exemple, dans un .NET app.config vous pourriez obtenir

<configuration>
   <configSections>
      <section name="MyConfig" type="MyAssembly.MyType, MyAssembly, PublicKeyToken=null" />
   </configSections>
   ...
</configuration>

La signature dans la partie de type semble être normalisé dans une variété d'endroits .NET, mais je ne sais pas comment le faire dans mes propres programmes. J'ai System.Activator utilisé dans mes programmes, mais qui se sentent comme si je dupliquer le travail déjà fait .NET.

En ce qui concerne la programmation comment dois-je faire ceci:

void Main()
{
   object instance = CreateInstance("MyAssembly.MyType, MyAssembly, PublicKeyToken=null");
   Console.WriteLine(instance.GetType().Name);
}

object CreateInstance(string dotNetTypeSignature)
{
   // Code goes here.
}
Était-ce utile?

La solution

Vous pouvez appeler la méthode Type.GetType pour obtenir un objet Type avec le nom donné (ensemble qualifié).

Vous pouvez appeler la méthode Activator.CreateInstance créer une instance d'un type. (En supposant que le type a un constructeur public par défaut, ou que vous savez quels arguments constructeur il faut).

Par exemple:

Activator.CreateInstance(Type.GetType(name));

Autres conseils

Ces sections sont généralement créés / accès avec le concepteur du studio visuel.

Dans le regard de l'explorateur de solution sous Propriétés-> Settings.settings ou via un clic droit sur le projet name-> Propriétés-> Paramètres.

Le nom complet du type est habituellement utilisé pour faire « tardive » à un type particulier. Dans l'exemple de fichier de configuration que vous avez, le type de section de configuration réelle n'a pas été connue au moment de la construction CLR, de sorte que le ConfigurationManager doit lire le formulaire de type réel du fichier de configuration et isntantiate il au moment de l'exécution. Cela se fait en utilisant la classe System.Activator, comme vous l'avez mentionné, et il est le moyen standard de le faire à travers le monde .Net.

Bien sûr, si le type que vous souhaitez créer une instance de est connue au moment de la construction, vous devez simplement faire référence à l'ensemble qui le contient et l'utilisation new. Toutefois, si vous souhaitez implémenter des extensions d'exécution comme le ConfigurationManager, vous devez utiliser le Activator CreateInstance ou href="http://msdn.microsoft.com/en-us/library/system.activator.createinstancefrom.aspx" rel="nofollow noreferrer"> CreateInstanceFrom méthodes, qui ont qui vous permettent overrides de passer la chaîne exacte lue par tout ce que vous utilisez config, ou une instance de Type, qui peut également être créé à partir de la même chaîne.

Et bien sûr, il y a l'autre côté, où toute mise en œuvre de votre point de besoin d'écrire l'extensibilité sur le nom du type complet. Pour ce faire, vous pouvez utiliser typeof(MyType).FullName ou myInstance.GetType().FullName.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top