2010-07-06 3 views
2

사용자가 콤보 상자에서 유형을 선택하는 Windows 응용 프로그램을 만들고 있습니다. 선택을 기반으로, 리플렉션을 사용하여 해당 유형의 인스턴스를 만들고 해당 메소드 중 하나를 호출하려고합니다. 작성하려는 유형은 같은 Windows 응용 프로그램에서 sperate 클래스로 정의됩니다. 하지만 제목에서 언급 한 오류가 나타납니다. 내 코드를 heres.xxx를 어셈블리 xxx에서로드 할 수 없습니다.

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 인터페이스 : ILogBase를 구현

interface ILogBase 
{   
    string process(); 

} 

SustainabilityXpress는 클래스 :

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

답변

5

SustainabilityXpress 클래스의 이름을 올바르게 지정하십시오. 네임 스페이스를 앞에 추가하는 것을 잊지 않았습니까? (예 : "Name.Space.SustainabilityXpress").

또한 모든 요구 사항이 충족되는지 확인하려면 Activator.CreateInstance을 확인하십시오.

@Grzenio가 지적했듯이 SustainabilityXpress이라는 오타가있을 수 있습니다.

+0

Humberto 님, 내 문제를 해결 한 네임 스페이스를 추가하십시오. – sunitw

0

난 그냥 "SustainabilityXpress는"있는 공간이 나타났습니다. 그것을 삭제 해보십시오, 아마도 이것이 문제 였을 것입니다.

1

이것이 게시물에만있는 경우 확실하지 않지만 "SustainabilityXpress "에는 공백이 없어야합니다. 또한 전체 클래스 이름 (네임 스페이스 포함)을 사용해야합니다.

이 방법이 도움이되지 않는다면 단순히 어셈블리에 유형이없는 것일 수 있습니다. GetExecutingAssembly은 현재 코드가있는 어셈블리를 가져옵니다.

+0

감사합니다. 이름 뒤에 공백이 있습니다. – Andy

관련 문제