将全局单例暴露给CSharpScripts

时间:2018-01-25 11:18:32

标签: c# roslyn

我想使用Roslyn Scripting Engine为其提供脚本引擎 我们的软件。我们的软件将其中一些api作为单身人士展示。但是我无法在执行的代码中访问这些静态。

例如,我想在脚本中执行类似的操作:

IOManager.Instance.DoWork(...);

当我这样做时:

var scriptContent = "IOManager.Instance.DoWork(...);
var options = ScriptOptions.Default;
options.AddReference(this.GetType().Assembly);
var script = CSharpScript.Create(scriptContent, options);
await script.RunAsync();

我收到此错误:

 The name 'IOManager' does not exist in the current context

我认为可能添加对当前程序集的引用可能会解决此问题。但它并没有。我也知道,可以将全局对象设置为脚本上下文。但是我想把我执行脚本的所有静态/单例都暴露给脚本本身。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要在脚本中添加IOManager的导入:

var script = CSharpScript.Create( "IOManager.Instance.DoWork(...)" , ScriptOptions.Default.AddImports( "Namespace for IOManager" ) );