C# 基于生产/调试标志的动态连接字符串

C# 基于生产/调试标志的动态连接字符串,c#,connection-string,C#,Connection String,我正在编写一个基于C#NET 4.5的Windows窗体应用程序 我想在其中一个类(可能是主窗体的类)中设置一个标志(布尔值),用于定义应用程序是否在调试模式下运行。我将使用此标志控制应用程序的各种操作,包括基于GUI的操作以及要使用的连接字符串 我对基于GUI的东西没有问题,因为标志是在主窗体的类中定义的,但是连接字符串有问题。DB access有一个单独的类,它基本上只定义一个常量,如下所示: namespace MyApp { class DatabaseInterface

我正在编写一个基于C#NET 4.5的Windows窗体应用程序

我想在其中一个类(可能是主窗体的类)中设置一个标志(布尔值),用于定义应用程序是否在调试模式下运行。我将使用此标志控制应用程序的各种操作,包括基于GUI的操作以及要使用的连接字符串

我对基于GUI的东西没有问题,因为标志是在主窗体的类中定义的,但是连接字符串有问题。DB access有一个单独的类,它基本上只定义一个常量,如下所示:

namespace MyApp
{
    class DatabaseInterface
    {
        public static string MyConnectionString = "Data Source=server;Initial Catalog=db";
    }
}
我想根据生产/调试标志更改连接字符串(实际上只是“服务器”)。我不想在每个使用连接字符串的地方都放一个if/then/else(在调试字符串和生产字符串之间切换),但我想要一个可以在整个应用程序中使用的命名连接字符串。我还希望不必实例化
DatabaseInterface
对象(我知道我可以在
DatabaseInterface
类的公共属性的“get”定义中动态更改它)


有什么方法可以做到这一点吗?

如果您希望基于一个标志执行此操作,并且不希望If无处不在,我建议您使用如下简单的getter:

namespace MyApp
{
    class DatabaseInterface
    {
        public static string getConnectionString()
        {
            return myFlag ? "Data Source=server;Initial Catalog=db" : "AnotherString";
        }
    }  
 }

与其在代码中解决这个问题,不如看看如何使用配置文件。如果您使用的是web应用程序,则可以使用web配置转换来指定调试和发布配置的外观(请参阅本文)。如果没有,您可以创建app.config的调试和发布版本,并通过将正确的版本复制到app.config,使用生成事件选择要使用的版本。请查看此处有关app.config和转换的内容:我们无法使用app.config,因为不想向用户公开连接字符串。App.configs通常是纯文本,加密它们的方法似乎不可行。