2016-08-29 1 views
0

를 사용하여 정적 클래스의 정적 필드의 메소드를 호출하는 반사? 전화 호출 비 정적 방법은 대상을 필요로 할 때 나는 오류가 발생했습니다어떻게 사양이 정적 클래스가 반사

  var specAttr = op.GetCustomAttribute<OperationSpecificationAttribute>(); 
      var specType = specAttr.SpecificationType; 
      var specTypeMethodName = specAttr.SpecificationMethodName; 
      var specField = specType.GetField(specTypeMethodName, BindingFlags.Public | BindingFlags.Static); 

      if (specField != null) 
      { 
       var specFieldType = specField.FieldType; 
       var result2 = specField.GetValue(null).GetType().GetMethod("IsSatisfiedBy").Invoke(null, new object[] { entity }); 
      } 

... 내가 부울 결과를 얻을 필요가 ... 도움말 감사 :이 시도!

+0

그냥 주제에서 벗어난 발언 : 당신은 당신은 인스턴스의 함께 메소드를 호출 할 필요가 나는 당신의 프로필을 openend하고 보상을 결코 참조하거나 최대-투표 정답 . 모든 사람들의 동기를 유지하기 위해 올바른 답변을 올리거나 답변이 올바른 경우 회색 체크를 확인하십시오. :) –

답변

2

리플렉션을 사용하여 IsSatisfiedBy 메소드를 호출하려고합니다. 제목과 모순되는이 메소드는 정적 메소드가 아니며 인스턴스 메소드입니다.

var instance = specField.GetValue(null); 
var instanceType = instance.GetType(); 
var methodInfo = instanceType.GetMethod("IsSatisfiedBy"); 
var result2 = methodInfo.Invoke(instance, new object[] { entity }); // <<-- instance added. 

또는 짧은 :

var instance = specField.GetValue(null); 
var result2 = instance.GetType().GetMethod("IsSatisfiedBy").Invoke(instance, new object[] { entity }); 
+0

매우 감사합니다, 작품! +1 –