根据我的经验,web.config文件受到广泛谴责。特别是,当你有多个支持的环境时,我发现它们很难管理,而且由于缺少更新时的验证和XML的冗长,我们很难进行更新。
有哪些替代方案?
答案 0 :(得分:5)
我个人不介意Web.Config用于小型一次性应用程序,但对于任何实质性内容我都避免将它们用于应用程序配置。
这就是我做的......
以下是一个例子......
// Config Contract
public interface IWebAppConfig
{
string SmtpHost { get; }
string RootUrl { get; }
}
// Define Common Config Values (values that don't change per environment)
public abstract class AbstractWebAppConfig : IWebAppConfig
{
public string SmtpHost { get { return "smtp.google.com"; } }
public abstract RootUrl { get; }
}
// Dev Config Settings
public class DevWebAppConfig : AbstractWebAppConfig
{
public override string RootUrl { get { return "http://localhost:1322"; } }
}
// Stage Config Settings
public class StageWebAppConfig : AbstractWebAppConfig
{
public override string RootUrl { get { return "http://stage.mysite.com"; } }
}
// Prod Config Settings
public class ProdWebAppConfig : AbstractWebAppConfig
{
public override string RootUrl { get { return "http://www.mysite.com"; } }
}
此方法的优点:
您仍然可以使用web.config来定义环境,这是我通常通过将以下内容添加到appSettings来执行的操作:
<appSettings>
<!-- accepts: dev|stage|prod -->
<add key="Env" value="dev" />
</appSettings>
或者,它可以是基于机器的,使用Envrionment Variables或其他一些构造。
答案 1 :(得分:4)
ASP.NET已存在多久;有多少生产网站正在使用它?
他们几乎都在使用web.config,因为它来自开箱即用。他们不能过多地“辱骂”它。
也就是说,看看.NET 4.0中ASP.NET的新功能,包括配置特定的web.config文件,以及web.config的基于xml的转换,允许生成特定于环境的web.config版本在部署时。
你可以贬低一点。
答案 2 :(得分:0)
我强烈反对你断言web.config文件“受到广泛辱骂”。根据我的经验,它们易于维护和管理,在某些情况下,您可以放置配置数据。
值得注意的是,VS2010支持每个构建配置web.config转换。我有一个web.config,web.debug.config和web.release.config。对于我的调试和生产SQL Server,调试和释放文件会覆盖web.config中指定的连接字符串,并用正确的字符串替换它们。我也使用它来使一些AppSettings值特定于配置。
由于您可以根据需要为多个不同的目标或配置添加构建配置,因此我不明白为什么您需要通过设计另一个存储库来重新发明轮子。
也就是说,您可以使用任何存储库来存储您想要存储的任何数据。数据库,您选择的格式的文本配置文件,加密图像或您拥有的内容。