2010-07-06 6 views
2

Je fais une application Windows où l'utilisateur sélectionne un type de zone de liste déroulante. Basé sur la sélection, en utilisant la réflexion je veux créer une instance du type respectif et invoquer une de ses méthodes. Les types que je veux créer sont également définis dans la même application Windows que les classes sperate. Mais je reçois l'erreur comme mentionné dans le titre. Voici mon code.Impossible de charger le type xxx xxx de l'assemblage

Code Form1:

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
     cbLogs.SelectedIndex = 0; 
    } 

    private void btnProcess_Click(object sender, EventArgs e) 
    { 
     lblMessage.Text = ""; 
     lblResult.Text = ""; 
     if (cbLogs.SelectedIndex <= 0) 
     { 
      lblMessage.Text = "Please select Log to be processed"; 
      cbLogs.Focus(); 
      return; 
     } 
     Assembly currAss = System.Reflection.Assembly.GetExecutingAssembly(); 
     //I get above error on below line. 
     object obj = Activator.CreateInstance(currAss.FullName,"SustainabilityXpress "); 
     Type type = obj.GetType(); 
     object result = type.InvokeMember("process", 
      BindingFlags.Default | BindingFlags.InvokeMethod, 
      null, obj, null); 

     lblResult.Text = result.ToString(); 

    } 

} 

ILogBase Interface:

interface ILogBase 
{   
    string process(); 

} 

classe SustainabilityXpress qui implémente ILogBase:

public class SustainabilityXpress: ILogBase 
{ 
    string LogName = "SUSTAINABILITYXPRESS"; 
    public string process() 
    { 
     return "Sustainabilityxpress"; 
    } 
} 

Répondre

5

Assurez-vous de nommer correctement la classe SustainabilityXpress - n'oublie-tu pas de préfixer son espace de noms? (par exemple, "Name.Space.SustainabilityXpress").

Aussi, vérifiez Activator.CreateInstance pour assurer que toutes les exigences sont remplies.

Et, comme @Grzenio a fait remarquer, il peut y avoir une faute de frappe dans le nom SustainabilityXpress.

+0

Humberto Thanx, en ajoutant l'espace de noms résolu mon problème. – sunitw

0

Je viens de remarquer il y a un espace dans "SustainabilityXpress". Essayez de le supprimer, peut-être que c'était le problème.

1

Je ne suis pas sûr que ce soit seulement dans le poste, mais il ne doit pas être un espace dans "SustainabilityXpress ". Vous devez également utiliser le nom complet de la classe (y compris l'espace de nom).

Si cela ne fonctionne pas, peut-être le type est tout simplement pas dans l'assemblée? GetExecutingAssembly vous obtient l'assembly où le code actuel est ...

+0

grâce - moi avons eu un espace après le nom trop – Andy

Questions connexes