2012-12-23 3 views
1

내가이 매우 간단한 방법 내가 호출 할 수 있고 다른 나를 발견되지 예외를주고 그 중 하나가 같은 클래스 인스턴스의 메소드를 호출, 여기에 방법은 다음과 같습니다입력의 Arg

class SimClass 
    { 
     public int GeneralMethod1(int a) 
     { 
      return a; 
     } 

     public int GeneralMethod2(Input input) 
     { 
      return input.Numberi; 
     } 

    } 
    class Input 
    { 
     public int Numberi { get; set; } 
    } 

단순히 "GeneralMethod2"를 호출에 문제를

 Assembly assembly = Assembly.LoadFrom("C:\\Amir\\SimFIle.dll"); 
     Type type = assembly.GetType("SimFIle.SimClass"); 
     object instanceOfMyType = Activator.CreateInstance(type); 

     object[] Args1 = new object[1]; Args1[0] = -1; 
     object result = type.InvokeMember("GeneralMethod1", 
       BindingFlags.Default | BindingFlags.InvokeMethod, 
        null, 
        instanceOfMyType, 
        Args1); 

를하지만이 있습니다 : "GeneralMethod1"를 호출 할 수 있습니다

Input input = new Input { Numberi = -5}; 
    object[] Args2 = new object[1]; Args2[0] = input; 
    object output = type.InvokeMember("GeneralMethod2", 
      BindingFlags.Default | BindingFlags.InvokeMethod, 
       null, 
       instanceOfMyType, 
       Args2); 

것 당신 PLE를 내 실수는 무엇입니까?

+0

문제는 무엇인가 :

어느 쪽이든, 당신은 동적으로로드 된 어셈블리 내에서 Input 클래스를 사용하여 문제를 해결 할 수 있어야한다? – SLaks

+0

코드가 올바른 것 같습니다. Assembly.LoadFrom ("C : \\ Amir \\ SimFIle.dll")에서 가장 많이 업데이트 된 DLL을로드하지 않았을 수 있습니다. 이 코드를 사용해보십시오 : Type type = typeof (SimClass); 작동하는지 확인하십시오 –

답변

2

다른 Input 클래스를 사용하는 것이 문제라고 생각됩니다. SimFile.dll을 동적으로로드하지만 Input의 인스턴스를 정적으로 생성합니다. 그것은 당신이 만들고있는 Input 클래스가없는 당신의 메소드를 호출하고있는 어셈블리의 것과 동일한 의미한다.

이미 이있는 경우 코드에서 SimFile.dll에 대한 참조, 당신은 안 그것을 명시 적으로로드하십시오 - 그건 단지 물건을 혼란스럽게 할 것입니다. 에 프로젝트의 SimFile.dll에 대한 참조가없는 경우 완전히 다른 Input 유형의 인스턴스를 생성하고있는 것으로 추정됩니다.

Type inputType = assembly.GetType("Input") 
object input = Activator.CreateInstance(inputType); 
inputType.GetProperty("Numberi").SetValue(input, -5); 

// Rest of code as before 
+0

유형 inputType = assembly.GetType ("SimFIle.Input"); 개체 입력 = Activator.CreateInstance (inputType); InputType.GetProperty ("Numberi"). SetValue (input, -5, null); // 작동 함, 고마워요. –