使用这个问题的答案中的建议,我创建了一个新类型 (_NotInFile) 和单例实例 (NotInFile) 来表示一系列 IronPython 脚本中的特殊条件。我在 Python 和 IronPython(从命令行)中测试了我的实现,并看到了正确和预期的行为。
然后,我将我的代码传递给了一位同事,该同事通过 C# 的动态脚本功能在一个大型 Visual Studio 项目中使用我的脚本。使用完全相同的脚本,当检查值明确显示它是 _NotInFile 类型并且只能是我创建的单例实例时,他看到表达式itm.data_attr is NotInFile
返回。false
itm.data_attr
需要明确的是,我的同事自己并没有使用 NotInFile 对象。相反,他正在调用我的一个脚本,该脚本实例化一组对象(其中一些具有分配了 NotInFile 单例的属性),然后根本不对该集合进行操作,而是调用我的另一个脚本来处理该集合。当我进行相同的调用(从命令行测试脚本)时,is
操作员按预期执行,当他执行相同的操作时,它似乎失败了。
我唯一能想到的是,C# 可能会实例化 IronPython 的单独“副本”以调用摄取和处理脚本,并且每个副本都会在不同的内存地址实例化它自己的单例副本,以便单例实例化实际上,第二个脚本中的对象与第一个脚本中实例化的对单例的存储引用不同。
我是否正确识别了问题?如果是这样,是否可以指示 C# 动态脚本系统在 IronPython 的同一个实例中运行两个单独的脚本?