【问题标题】:From where a class library (.dll) should read its configuration? [closed]类库 (.dll) 应该从哪里读取其配置? [关闭]
【发布时间】:2012-09-19 15:56:52
【问题描述】:
我已经在做一个 .net 项目,但我认为这个问题可以适用于任何编程语言/框架。
问题是读取类库配置的良好做法是什么。我可以想到以下选项:
-
从应用程序域的配置文件中读取。例如对于 .net web 应用程序,从 web.config 中读取
-
从为这个类库制作的特定自定义文件中读取。就像为你的类库创建一个 xml 文件并将你的配置放在那里。
-
调用者应将所需的配置传递给类库(通过类构造函数)。所以在这种情况下,类库不会直接从配置文件中读取,而是希望调用者发送所需的信息。
有什么想法/偏好吗?
【问题讨论】:
标签:
.net
dll
configuration
web-config
class-library
【解决方案1】:
出人意料(或不出所料?)视情况而定。
从开发人员的角度来看,最好通过库 API 提供调用方配置,因为它允许在更广泛的环境中使用库,而不依赖于库的运行方式托管。提供一个可以从应用程序域或私有文件中提取的配置加载器是很重要的,如果不执行任何配置,则合理可用的默认值是一个明智的保护程序。
从运营商的角度来看,能够覆盖开发人员提供的任何设置也很有用,因为它们在您的环境中没有意义。不过,我不清楚如果开发人员故意试图将环境的形状强加给你,这会如何工作。
我认为最好的折衷方案是考虑所有三种可能性,as log4net does。
【解决方案2】:
标准做法似乎是这样的
从应用程序域的配置文件中读取。例如对于 .net web 应用程序,从 web.config 中读取
您通常有一个特定于您的库的配置部分,其中包含大量这种做法的示例(nhibernate、log4net、spring.net 等)。此部分可以指向一个单独的文件,以使您的文件尽可能短,例如:
<log4net configSource="Config\log4net.config.xml" />
编辑
我同意@Jeffrey Hantin,它实际上取决于您尝试执行的配置类型。
应将“动态”设置放在配置文件中,以便灵活且轻松地进行更改。其他一些,作为 nhibernate 映射,更适合以“流畅”的方式(通过代码)应用。
Fluent 配置减少了拼写错误的可能性,但它们并不总是合适的。