【问题标题】:How to access a custom config from my class library application?如何从我的类库应用程序访问自定义配置?
【发布时间】:2011-11-28 18:25:12
【问题描述】:

我的基础架构项目中有一个自定义配置,但是当我的应用启动时,只有我的 web.config 被识别。

我不想将此自定义配置文件的配置放在我的 web.config 中,因为此配置是基础设施层的责任。

如何在我的 Web 项目中使用来自另一个项目的自定义配置?

【问题讨论】:

  • 您拥有哪些 Web 应用程序不应该知道的基础架构配置?
  • @Harper 是关于用户将在应用中保存的文件路径的设置;
  • OK - 所以这是内部应用程序配置,但不是真正的“基础设施”。在我看来,这听起来确实像是属于 web.config 的内容。不过,我通常会为这样的事情创建一个自定义配置部分,因此您最终不会得到各种疯狂的 appSettings 键。
  • web.config 是一个配置文件 - 所有 层都可以访问它。它位于“UI”项目中的事实是一个实现细节,而不是它是什么的声明。
  • 当然。在 Visual Studio 解决方案中,web.config(或 app.config)文件位于 UI 项目中。由于现有的 VS 构建过程,这可能是您不会改变的。但是,配置文件是针对应用程序的,而不是针对应用程序的任何特定逻辑层的。您可以调整构建过程,以便将特定的配置信息存储在一个单独的文件中,该文件可以从最终的 web.config 中引用,而不是它的一部分,或者(在 2010 年),您可以创建构建的 web.config 转换进程用于自定义配置。这些只是细节

标签: .net asp.net configuration web-config


【解决方案1】:

类似这样的:

var exeMap = new ExeConfigurationFileMap {ExeConfigFilename = @"C:\Path\To\Your\File"};
Configuration myConfig = ConfigurationManager.OpenMappedExeConfiguration(
    exeMap, ConfigurationUserLevel.None
);

【讨论】:

  • 还有更简单的方法吗?
  • 当然,您可以使用<appSettings file="foo.config"> 方法,但是您只能使用另一个文件的相对路径。这通常用于组织应用设置和配置字符串。
  • 我知道这种方法,但我也不想使用它们。经常看到log4net等其他库的自定义配置文件,不知道是怎么用的。
  • nHibernate 也使用这种设置,但他们编写了自己的配置框架。
【解决方案2】:

假设基础设施项目是一个类库,您是否考虑过创建属性以将 app.config (?) 设置公开给前端?

这是我的意思的一个例子。请记住,这只是一个示例。它是一个属性,演示了如何通过属性公开配置值。在您的情况下,该属性将从您的自定义配置文件中检索一个值。

public string GetConfigurationValue(string Key)
{
    return GetValueFromConfiguration(Key);
}

我想知道的一件事是,您为什么要创建自定义配置文件,而不仅仅是创建可以集成到 app.config 文件中的配置部分。看起来你让事情变得比他们需要的要困难得多。

【讨论】:

  • 不是 app.config,是自定义配置。是的,要创建自定义配置,我需要创建一个派生自 ConfigurationSection 的类。您的意思是直接从类中获取值而不是从配置文件中获取值?
  • 不,我的意思是创建从配置文件中检索值的公共属性,因此使用该库的 Web 应用程序可以使用这些属性来访问配置值。
  • -1:为什么你的例子使用WebConfigurationManager?这会将代码限制为从 ASP.NET 调用。
  • 我说得很清楚,这是一个例子,他的实现会有所不同。它旨在演示通过属性公开配置值的概念。老实说,您会对此投反对票,这让您感到惊讶。我觉得你没有看我的回答。
  • 我确实阅读了评论,并且我知道他的特定示例,但我觉得当有人来到这个答案寻找配置文件信息时,您的示例给出了错误的想法。
【解决方案3】:

之前对这个问题的回答没有告诉你一个关键点。

.NET 旨在为每个AppDomain 提供一个配置过程。所有类库都将使用调用它们的应用程序的配置文件。在您的情况下,您的类库将使用 web.config。如果您的类库是从控制台应用程序中使用的,那么它将使用 application.exe.config 文件。

当您考虑它时,这是唯一有意义的事情。如果您的类库是从两个单独的应用程序中使用的,那么它将有两个单独的配置。这些配置必须代表调用应用程序进行管理。

【讨论】:

  • 看看我的情况,我需要一个自定义配置文件来设置保存文件的路径。 Web.config 存在于 UI 层,你确定吗?
  • 如果您的类库是从网页调用的,那么是的,它需要在 web.config 中。这不是层的问题。它与层完全无关。它与需要修改哪个文件以更改配置有关。 .NET 每个应用程序需要一个文件,而不是像 .ini 文件或注册表那样每个组件一个文件,从而使配置更加更容易。
  • 您有一个来源说 .NET 旨在为每个 AppDomain 提供一个配置过程?
  • msdn.microsoft.com/en-us/library/ms229689.aspx:“应用程序配置文件的名称和位置取决于应用程序的主机,可以是以下之一”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2010-09-14
  • 1970-01-01
相关资源
最近更新 更多