.net 如何防止应用程序在调试/测试期间与外部世界通信?

.net 如何防止应用程序在调试/测试期间与外部世界通信?,.net,testing,compiler-directives,.net,Testing,Compiler Directives,我有两个单独的应用程序(都是同一个系统的一部分),它们共享一个公共数据库。一个应用程序是负责与外部世界通信的“网关”,另一个是局域网上的本地用户用来读取/修改/更新本地数据库中数据的桌面客户端 在特定的时间间隔内,网关应用程序将从各种web服务下载新数据到本地数据库。同样,网关应用程序将扫描本地数据库的更改(由用户通过桌面客户端进行),并将这些更改上载到相应的web服务 两个数据库正在使用中,一个用于生产,另一个用于测试/调试。网关通过更改app.config中的连接字符串在两者之间切换 在测试

我有两个单独的应用程序(都是同一个系统的一部分),它们共享一个公共数据库。一个应用程序是负责与外部世界通信的“网关”,另一个是局域网上的本地用户用来读取/修改/更新本地数据库中数据的桌面客户端

在特定的时间间隔内,网关应用程序将从各种web服务下载新数据到本地数据库。同样,网关应用程序将扫描本地数据库的更改(由用户通过桌面客户端进行),并将这些更改上载到相应的web服务

两个数据库正在使用中,一个用于生产,另一个用于测试/调试。网关通过更改app.config中的连接字符串在两者之间切换

在测试网关应用程序时,我希望它以只读方式运行;也就是说,它可以将新数据下载到(测试/调试)数据库,但不能将任何更改上传回web服务

我现在实现这一点的方法是在应用程序上传数据的地方使用#IF DEBUG指令,如下所示:

public void DetectAndUploadChanges()
{
    Uploader Up = new Uploader();
    Up.DetectChanges();

    #IF !DEBUG
        Up.UploadChanges();
    #END IF
}
这个方法依赖于我记住在代码可以上传某种类型的更改的地方使用debug指令


有更好的/替代方法来做这类事情吗?

您可以使用DI(依赖项注入),在运行时实例中进行注入。

您的意思是注入一个上传程序,该上传程序在其UploadChanges方法中什么都不做?是的,就像DebugUploader一样,它与Uploader具有相同的接口,但UploadChanges方法什么都不做(并且只在容器中配置一次,并在生产中更改)。我应该提到我没有使用IoC容器。我仍然可以使用DI注入上传程序,但我不确定这是否有帮助,因为DetectAndUploadChanges的调用方仍然必须知道要注入哪个上传程序。对于调用方,要确定要注入哪个上传程序,需要相同类型的#IF调试检查。