2012-02-14 2 views
1

Jint에서 실행되는 스크립트가 네임 스페이스로 설정 한 기존 API에 액세스 할 수 있도록 허용하려고합니다. 그 말은 다른 네임 스페이스를 포함하여 API가 포함 된 단일 네임 스페이스를 갖고 있음을 의미합니다. 스크립트가 .Net 프레임 워크를 포함한 나머지 코드에 액세스하는 것을 허용하고 싶지 않습니다. 그들에게, 그러나 무례를 http://jint.codeplex.com/discussions/310772 을하지만 포럼은 매우 활성화 될 나타나지 않고 나는 내가 여기에 게시하고 빨리이 대답 할 수 있도록하고 싶습니다 : 특정 네임 스페이스를 Jint에 노출

는 이미 여기에 jint를 포럼에 게시 없었다 잘.

A는 얼마 전, ThomasMaierhofer은 아마 여기를 해결하기 위해 수정할 수이 비슷한 달성 : http://jint.codeplex.com/discussions/211291

내 경험이 뇌에이 엔진에 API를 노출 정말 깔끔한 방법처럼 보인다, 그러나 나는 전에 이런 식으로 한 것을 본 적이 없다.

제 질문은 다음과 같습니다. 그렇다면 왜 전에 이렇게하지 않았습니까? 그리고 Jint 소스를 수정하지 않고도이 작업을 수행 할 수있는 방법이 있습니까? 새 버전이 출시되면 Jint .dll을 쉽게 업데이트 할 수 있습니까?

편집 : 내가 가진 현재의 API는 여러 기능을 가진 각각의 여러 클래스로 구성되어 있습니다. SetParameter를 사용하여 이러한 클래스의 특정 인스턴스를 절대적으로 노출시킬 수 있습니다. Jint에는 AllowClr 속성도 있습니다.이 속성을 사용하면 네임 스페이스를 완전히 정규화하여 스크립트에서 CLR에 액세스 할 수 있습니다. 이 값을 false로 설정하면 어떻게되는지 보여주는 예제 코드입니다. 출처 : 단지 특정 네임 스페이스가 아닌 다른 모든 것들에 대한 http://jint.codeplex.com/wikipage?title=Using%20.NET%20classes%20from%20scripts

string stringBuilder = @" 
    var sb = new System.Text.StringBuilder(); 
    return sb.ToString(); 
    "; 
var engine = new JintEngine(); 
engine.AllowClr = false; 
engine.Run(stringBuilder); // throws a SecurityException 
나는이 허용하고자

하지만 . 질문을 명확하게하기를 바랍니다.

도움을 주셔서 감사합니다.

샘.

P. 나는 VB.Net에서 일하고 있지만 C# 관련 답변은 괜찮습니다.

답변

1

Jint는 기본적으로 사용자가 결정한 이름으로 액세스하여 인터프리터에서 호출 할 수있는 객체 인스턴스를 전달할 수있는 SetParameterSetFunction()과 같이 엔진 호출을 직접 수행 할 수있는 두 가지 방법을 제공합니다. 호스팅 코드의 함수. 당신은 어떤 규칙에 의해 많은 객체를 프로그램 적으로 노출시키고 싶다면 리플렉션을 사용하여 작업 할 수 있습니다. 이것이 jint 코드를 수정하지 않고도 요구 사항을 충족시킬 것이라고 생각합니다.

+0

그러나 답변을 주셔서 감사합니다. 어떻게 작동하는지 오해가 아니라면 문제가 해결되지 않습니다. 나는 세부 사항을 추가하기 위해 질문을 편집 할 것이다. – SeriousSamP

+0

나는이 질문에 대해 확장했다. – SeriousSamP

관련 문제