2010-07-06 64 views
2

我正在製作一個Windows應用程序,用戶從組合框中選擇一種類型。基於選擇,使用反射我想創建相應類型的實例並調用其方法之一。 我想創建的類型也被定義在與sperate類相同的Windows應用程序中。但是我收到了Title中提到的錯誤。繼承人我的代碼。無法從程序集xxx中加載類型xxx

Form 1代碼:

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 ILogBase 
{   
    string process(); 

} 

SustainabilityXpress中類,它實現ILogBase:

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

回答

5

一定要正確命名SustainabilityXpress類 - 是不是你在僞裝它的名字空間? (例如,「Name.Space.SustainabilityXpress」)。

此外,檢查Activator.CreateInstance以確保滿足所有要求。

而且,正如@Grzenio指出的那樣,名稱SustainabilityXpress可能存在拼寫錯誤。

+0

thanx Humberto,添加命名空間解決了我的問題。 – sunitw 2010-07-07 11:30:08

0

我只注意到有在 「SustainabilityXpress中」 的空間。嘗試刪除它,也許這是問題。

1

我不確定這是否只發布在帖子中,但是"SustainabilityXpress "中一定不能有空格。您還必須使用完整的類名(包括名稱空間)。

如果這沒有幫助,也許該類型不在組件中? GetExecutingAssembly讓你獲得當前代碼所在的程序集...

+0

謝謝 - 我的名字後面也有一個空格 – Andy 2016-05-31 12:57:46