对于我正在从事的一个项目,我正在将一个类作为一个奇点来实现。该类负责检测系统正在运行的阶段(开发、测试、生产等),并相应地返回某些值,因此我们的开发团队不必担心每次使用这些值时处理暂存设置。此外,它允许我们覆盖当前的阶段,以假装处于不同的阶段。
我关心的是在涉及多线程时奇点将如何表现。下面的代码概述了将使用的基本设置。
我的问题是,如果 program & program2 可以同时在不同的线程上运行,OverrideStage() 函数(它会更改实例中的私有变量)会干扰其他程序的预期行为吗?
例子:
1) 程序启动,为 DEV 搭建舞台
2) 在另一个线程上,Program2 启动,将阶段设置为 PRODUCTION
3)回到Program,尝试获取一个值,该值是DEV还是PRODUCTION?
namespace TESTING
{
class Program
{
static void Run()
{
Staging stage = Staging.Instance;
stage.OverrideStage(Staging.DEV);
SqlConnection connDev = new SqlConnection(stage.ConnectionString("example")); // Connection to development database
// Do Stuff
stage.EndOverride();
SqlConnection connBackToAuto = new SqlConnection(stage.ConnectionString("example")); // Connection to detected stage database
}
}
class Program2
{
static void Run()
{
Staging s = Staging.Instance;
s.OverrideStage(Staging.PRODUCTION);
SqlConnection connDev = new SqlConnection(s.ConnectionString("example")); // Connection to production database
// Do stuff
s.EndOverride();
}
}
} // End namespace
我想这个问题可以简化为:
s 和 stage 是同一个 Staging 实例吗?