1

使用这个问题的答案中的建议,我创建了一个新类型 (_NotInFile) 和单例实例 (NotInFile) 来表示一系列 IronPython 脚本中的特殊条件。我在 Python 和 IronPython(从命令行)中测试了我的实现,并看到了正确和预期的行为。

然后,我将我的代码传递给了一位同事,该同事通过 C# 的动态脚本功能在一个大型 Visual Studio 项目中使用我的脚本。使用完全相同的脚本,当检查值明确显示它是 _NotInFile 类型并且只能是我创建的单例实例时,他看到表达式itm.data_attr is NotInFile返回。falseitm.data_attr

需要明确的是,我的同事自己并没有使用 NotInFile 对象。相反,他正在调用我的一个脚本,该脚本实例化一组对象(其中一些具有分配了 NotInFile 单例的属性),然后根本不对该集合进行操作,而是调用我的另一个脚本来处理该集合。当我进行相同的调用(从命令行测试脚本)时,is操作员按预期执行,当他执行相同的操作时,它似乎失败了。

我唯一能想到的是,C# 可能会实例化 IronPython 的单独“副本”以调用摄取和处理脚本,并且每个副本都会在不同的内存地址实例化它自己的单例副本,以便单例实例化实际上,第二个脚本中的对象与第一个脚本中实例化的对单例的存储引用不同。

我是否正确识别了问题?如果是这样,是否可以指示 C# 动态脚本系统在 IronPython 的同一个实例中运行两个单独的脚本?

4

1 回答 1

0

除了在 StackOverflow 上发布此问题外,我还向我的同事发送了该问题的链接。他能够确定他正在实例化 IronPython 运行时的两个不同实例,因此这两个单例实际上是不同的对象。

他稍微更改了代码以在 Python 运行时的单个实例中运行这两个脚本,并且代码开始表现出与我的测试中相同(正确)的行为。因此,我的两个问题的答案都是“是”(问题是两个运行时,C# 可以使用同一个运行时来调用几个不同的脚本)。

一旦我从我的同事那里学到了修复 C# 中的问题所需的确切步骤,我将更新这个答案。

于 2013-06-26T13:55:39.250 回答