我们在Visual Basic .NET中开发了一个相当强大的程序,我们创建了一个基本上将整个程序表示为单个对象的API。这很好用,我们已经使用了很多年 - 但现在我们真的可以使用多个实例来实现一个项目。
问题在于代码库对Startup模块中的全局变量(gSvcMgr)有广泛的引用。如何使此对象的多个实例引用另一个变量?我可以使用命名空间吗?或Shadows关键字?
如果我不清楚,或者细节可能有帮助,我可以进一步描述结构。
虽然重构全局变量并不是不可能的,但它是唯一的选择,我们有一个非常大的代码库,只有少数开发人员。
谢谢!
答案 0 :(得分:1)
您可以使用Application Domain在单独的AppDomain.CreateInstanceAndUnWrap中创建应用程序对象的每个实例。这将创建选项的每个实例,它是一个不同的域,其中将拥有自己的共享全局数据副本,并且不会相互接触。
然而,使用应用域会带来性能成本 - 应用域之间的所有方法调用都将为marshaled(读取已复制)。您还必须从MashalByRefObject派生您的应用程序对象。
有关使用应用域解决类似问题的示例,请参阅此blog post。