将全局单例公开给 CSharpScripts

Expose global singletons to CSharpScripts

我想使用 Roslyn 脚本引擎为 我们的软件。我们的软件将其中的一些 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

我想也许添加对当前程序集的引用可能会解决这个问题。但事实并非如此。我也知道,可以将全局对象设置为脚本上下文。但是我想将我执行脚本时可访问的所有 statics/singletons 暴露给脚本本身。

感谢您的帮助。

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

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