我想允许在 Jint 中运行的脚本访问我已设置为命名空间的预先存在的 API。我的意思是我有一个包含 API 的命名空间,包括其他命名空间。我不想让脚本访问其余代码——包括 .Net 框架。
我已经在 Jint 论坛上发布了这个:http: //jint.codeplex.com/discussions/310772 但是,没有不尊重他们,但论坛似乎不是很活跃,我希望能够回答这个问题尽快,所以我也在这里发帖。
不久前,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
我想允许这样做,但仅限于特定的命名空间,而不是其他所有内容。我希望这能让问题更清楚。
谢谢你的帮助,
山姆。
PS 我在 VB.Net 工作,但涉及 C# 的答案很好。