2014-02-05 3 views
1

EDITED : 죄송 합니다만이 샘플은 작동합니다 ... 내 문제를 단순화했습니다. 문제의 원인을 찾았습니다. const 유형입니다. 샘플에서 "int"이며 실제 코드는 "short"입니다. 그렇다면 나는 왜 짧은 상수에 접근 할 수없는 가라는 질문을 다시 말해야한다. 나는 const의 타입을 바꿀 수 없다.Spring.Net ExpressionEvaluator를 사용하여 "복잡한"상수 값을 얻습니다.


개체의 속성을 내부 클래스에 정의 된 상수와 비교하려고합니다. 샘플 : 나는 spring.net의 ExpressionEvaluator에 A.B.AB_CONST을 포함하는 표현식을 평가하려고 할 때

public class A { 
    public const int A_CONST = 1; 
    public class B { 
     public const int AB_CONST = 1; 
    } 
} 

지금, 나는 그것을 할 수있는 방법을 모르겠어요. 나는 많은 것을 시도했지만 효과가 없었습니다.

내가 등록한 타입 A :

TypeRegistry.RegisterType(typeof(A)) 

내가 A_CONST

ExpressionEvaluator.GetValue(null, "A.A_CONST") 

그러나 클래스 A.B와 에 액세스 할 수 있습니다, 그것은 작동하지 않습니다. 나는 '.'을 사용하여 별칭으로 유형을 등록하려고 시도했다. 및 '+'. 다른 방법으로도 액세스 할 수 있지만 절대로 효과가 없습니다.

TypeRegistry.RegisterType(typeof(A.B)) 
ExpressionEvaluator.GetValue(null, "A.B.AB_CONST") 
ExpressionEvaluator.GetValue(null, "A+B.AB_CONST") 


TypeRegistry.RegisterType("AB", typeof(A.B)) 
ExpressionEvaluator.GetValue(null, "AB.AB_CONST") 

TypeRegistry.RegisterType("A.B", typeof(A.B)) 
ExpressionEvaluator.GetValue(null, "A.B.AB_CONST") 
ExpressionEvaluator.GetValue(null, "A+B.AB_CONST") 

어떤 아이디어가 있습니까?

답변

0

몇 가지 시도를 한 후에 해결책을 찾았습니다. 나는 '정적'으로 '를 const'교체했고 마침내 작동합니다

클래스 상수 정의 :

public class A { 
    public static short A_CONST = 1; 
    public class B { 
     public static short AB_CONST = 1; 
    } 
} 

등록 유형을 명시 적으로 동적으로 ExpressionEvaluator 통해 상수에

TypeRegistry.RegisterType(typeof(A)); 
TypeRegistry.RegisterType(typeof(A.B)); 

액세스 :

object result = ExpressionEvaluator.GetValue(null, "A.A_CONST"); 
Assert.AreEqual(A.A_CONST, result); 

result = ExpressionEvaluator.GetValue(null, "A.B.AB_CONST"); 
Assert.AreEqual(A.B.AB_CONST, result);