根据我的经验,web.config文件是广泛被诟病的。特别是在需要支持多个环境和更新时,它们很难管理,并且由于缺乏验证和XML冗长而难以更新。
那么有什么替代方案呢?
根据我的经验,web.config文件是广泛被诟病的。特别是在需要支持多个环境和更新时,它们很难管理,并且由于缺乏验证和XML冗长而难以更新。
那么有什么替代方案呢?
对于小型临时应用程序,我个人并不介意使用Web.Config,但对于任何重要的应用程序配置,我避免使用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>
另外,也可以通过使用环境变量或其他结构来实现机器化。
我强烈反对你所说的web.config文件是“广泛被鄙视”的说法。在我的经验中,它们易于维护和管理,并且在某些情况下是您可以放置配置数据的唯一位置。
值得注意的是,VS2010支持每个构建配置web.config转换。我有一个web.config、web.debug.config和web.release.config。调试和发布文件覆盖了web.config中指定的连接字符串,并用正确的字符串替换它们,针对我的调试和生产SQL服务器。我还使用这个来使一些AppSettings值特定于配置。
由于您可以为所需的许多不同目标或配置添加构建配置,因此我不明白为什么您会感到需要通过设计另一个存储库来重新发明轮子。
话虽如此,您可以使用几乎任何存储库来存储您想要存储的任何数据。数据库、文本配置文件以您选择的格式、加密图像等等。