将全局单例公开给 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" ) );
我想使用 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" ) );