我有一个Winform应用程序,其中有16个SQL连接,当前存储在DAL项目Settings.settings
中。
我正在尝试编写一个“Manager”类来简化此操作( like here)。但是,我在网上找到的大多数示例似乎都使用ConfigurationSettings.AppSettings["something"]
。虽然,我正在使用Properties.Settings.Default.something
。
有人可以解释哪些被认为是正确的以及桌面应用程序的原因?
答案 0 :(得分:4)
我认为正确的方法是使用app.config文件并将它们存储在connectionStrings部分中?
然后您可以访问它们,如:
ConfigurationManager.ConnectionStrings["something"].ConnectionString
如果那太“丑陋”,你可以轻松地写一个包装。
public class ConnectionManager
{
public string Something
{
get
{
// TODO: check to make sure the configuration exists and throw an exception perhaps
return ConfigurationManager.ConnectionStrings["something"].ConnectionString;
}
}
}
哎呀......正如所指出的,我的意思是做ConfigurationManager而不是ConfigurationSettings。
答案 1 :(得分:3)
我们更喜欢使用Properties.Settings(又名.settings.settings),因为它是强类型的。不要尝试在同一配置文件中执行具有不同环境(dev / prod)的花哨技巧。每个环境都有一个单独的配置文件,并在部署它们时重命名配置要容易得多。即。
app.config
app.stage.config
app.test.config
app.prod.config
我们使用PowerShell脚本(类固醇上的批处理文件)来进行部署。我将简化我们作为传统批处理文件所做的工作 - (伪代码/未经测试的样本):
@echo off
:: %1 is the environment name (first parameter)
setlocal
set source=c:\tfs\project\bin\release\
set target=\\server\share\path\
xcopy /s/e %source% %target%
:: Using a copy command to rename/overwrite the env specific version
if exists %target%\app.%1.config copy /y %target%\app.%1.config %target%\app.config
答案 2 :(得分:2)
我从未成为将sql连接字符串放入软件配置文件的忠实粉丝。用户习惯于出于好奇或愚蠢(或两者的某种组合)来搞砸他们。我喜欢将我的所有连接字符串(开发,模型,生产等)放入我的数据访问库的属性中,并在其中包含一个ConfigurationSettings类,我用它来根据消耗设置的某些属性来访问它们应用程序:
public class ConfigurationSettings
{
public static string MyConnectionString
{
get
if(ConfigurationSettings.TestMode)
return Properties.Settings.Default.MyConnectionStringTest;
else
return Properties.Settings.Default.MyConnectionStringProd;
}
}
// I typically only have test and not-test. This could
// easily be some other combination of values to satisfy
// multiple environments.
public static bool TestMode { get; private set;}
}
这允许我通过公共名称调用此类的静态属性,并根据某些条件提供所有可用的连接字符串。这会使您的特定数据集,实体,您正在使用的任何数据模型处于担心连接字符串的业务中,并且可以将设置编译为.dll(并且不再需要担心它们)。也可以修改此方法,以类似的方法从app.config(我为ASP.Net站点执行)中提取设置。
更新:你所暗示的确没有“正确”的方式。 app.config旨在保存可修改的配置设置,而无需重建应用程序。属性设置旨在保存不可修改的设置。所以两者都完全有效。可能最“正确”的方式对于您的应用程序和开发团队来说都是有意义的。
答案 3 :(得分:1)
Properties.Settings.Default通常用于保存应用程序内部状态,如背景颜色,以记住用户设置。
ConfigurationSettings实际上是您正在讨论的“Manager”类,可以从app.config文件访问其他自定义设置集,包括连接字符串。