我想了解有关使 .NET 应用程序配置环境中立的最佳实践的一些想法。
背景。先来点背景。我来自 Java 世界,而不是 .NET 世界,在 Java 中,我们可以做一些事情来构建环境中立的包。它们通常基于以某种方式抽象配置。这里有一些例子:
- JNDI 允许应用程序通过名称引用企业资源(例如,数据库、JavaMail 会话、JCR 存储库等),然后根据环境(dev、test、prod)将该名称映射到特定的配置。
- 另一个例子是属性文件。您可能有一堆属性(例如,“encryption_key”、“smtp.server.url”、“admin.email”等),应用程序在启动时会从已知位置的属性文件中获取这些属性。属性键再次根据环境映射到不同的值。
- 一些应用程序开发框架(如 Spring)知道如何拉入属性文件,以便可以将属性与框架配置集成。
我在 Java 中看到的另一种方法是构建时方法,您可以使用 Ant(令牌替换)或 Maven(构建配置文件)来构建特定于环境的包。我不太喜欢这种方法,因为我非常喜欢部署完全相同的包来测试和生产。但这是我见过的一种方法。
所需的解决方案。我假设在 .NET 中有一些类似的策略可以将配置(以及扩展包含的包)与其环境解耦。
理想情况下,我想要一个解决方案,允许我保持与应用程序密切相关的非环境配置,仅外部化环境内容。回到 Java 示例,很多时候“配置”实际上是开发人员控制的东西,例如包含用于页面装饰的 Sitemesh servlet 过滤器、依赖注入或应用程序连接、映射某某 MVC 控制器方法到请求 URI 等。我不想被外部化的东西。但是加密密钥、数据库连接字符串、日志级别等等,是的。