gpt4 book ai didi

asp.net - ASP.NET 中 web.config 文件的替代方案

转载 作者:行者123 更新时间:2023-12-04 23:10:00 25 4
gpt4 key购买 nike

根据我的经验,web.config 文件受到广泛谴责。特别是,当您需要支持多个环境并且由于更新时缺乏验证和 XML 的冗长而难以更新时,我发现它们很难管理。

有哪些替代方案?

最佳答案

我个人不介意将 Web.Config 用于小型一次性应用程序,但对于任何实质性的事情,我都避免将它们用于应用程序配置。

这就是我要做的...

  • 我根据复杂性为我的配置定义一个或多个接口(interface)。
  • 我为每个环境(开发、阶段、产品等)创建不同的实现
  • 我使用抽象基类来定义通用配置。
  • 然后我使用 Ninject 进行依赖注入(inject),因此根据我的目标环境提供适当的实现。
  • 我总是对配置接口(interface)进行编码并从编译时检查中受益。

  • 这是一个例子...
    // 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 一样。

  • 您仍然可以使用 web.config 来定义环境,这就是我通常通过在 appSettings 中添加以下内容来执行的操作:
    <appSettings>
    <!-- accepts: dev|stage|prod -->
    <add key="Env" value="dev" />
    </appSettings>

    或者,它可以通过使用环境变量或其他一些构造来基于机器。

    关于asp.net - ASP.NET 中 web.config 文件的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2985538/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com