PropertyInfo.GetValue(null, null) retourne null
j'ai une classe avec un statique de la propriété publique appelle "Info".
par la réflexion, je veux obtenir cette valeur de propriétés, je l'appelle:
PropertyInfo pi myType.GetProperty("Info");
string info = (string) pi.GetValue(null, null);
cela fonctionne bien aussi longtemps que la propriété est de type string. mais en réalité, mon bien est de type IPluginInfo et un PluginInfo type (mise en place de IPluginInfo) est instatiated et retourné dans l'Info propriétés de l'accesseur get, comme ceci:
public static IPluginInfo PluginInfo
{
get
{
IPluginInfo Info = new PluginInfo();
Info.Name = "PluginName";
Info.Version = "PluginVersion";
return Info;
}
}
comme ça quand je l'appelle:
IPluginInfo info = pi.GetValue(null, null) as IPluginInfo;
info est toujours null, whiel PropertyInfo pi est toujours valide. ai-je raté quelque chose d'évident ici?
Vous devez vous connecter pour publier un commentaire.
Pourriez-vous créer une courte mais complète du programme qui illustre le problème?
Étant donné que vous parlez de plugins, mon deviner est que vous avez le problème de la IPluginInfo définis dans les deux assemblées. Voir si cet article aide à tous.
La meilleure façon de le vérifier est d'appeler
pi.GetValue
et stocker le résultat dans unobject
variable d'abord, puis de faire de la fonte ou "comme" dans une autre ligne. De cette façon, vous pouvez rompre le débogueur et de regarder la valeur de retour avant qu'il soit perdu.Mon premier imagine que vous avez déclarée de la IPluginInfo interface. Tous les .Types de réseau sont limités par leur assemblée; si vous avez le même fichier de classe dans les 2 assemblées, vous avez 2 interfaces différentes qui ont le même nom.
ok, merci pour toutes les réponses.
j'ai en effet déjà eu l'plugininterface dans un document distinct .dll, mais avait placé cette .dll dans le pluginhosts répertoire ainsi que dans le répertoire avec tous les plugins.
De messagerie unifiée, tout d'abord, je voudrais mettre en œuvre cette propriété un peu différemment:
Noter que ce besoin d'un peu plus de travail, car il n'est pas thread-safe, mais j'espère que vous avez compris l'idée: construire une seule fois plutôt que de manière répétée.
Je vais m'arrêter ici, maintenant, depuis qu'il ressemble à deux autres déjà fini le reste de ma réponse tout en mettant l'ensemble de la première partie.
En C#, COMME retourne null si la valeur ne correspond pas au type.
Si vous écrivez:
ce type de recevez-vous?