我正在寻找管理具有多个类库的项目的配置的最佳实践。我正在寻找可维护性和易于实现。
让我们假设一个简单的例子:一个带有2个类库的控制台项目。每个类库都需要自己的配置设置,并且有一些常见的设置。
类库1
班级图书馆2
第一种方法将在主项目上创建所有必要的设置:
但是这提出了几个问题:
理想的解决方案对我来说(虽然我担心不可能)将在单独的文件或至少不同的部分中设置自定义库设置。像这样:
<configuration>
<appSettings>
<add key="globalSetting" value="cl1Global"/>
</appSettings>
<appSettings file="CL1.config" >
<add key="cl1setting" value="cl1setting1"/>
</appSettings>
<appSettings file="CL2.config">
<add key="cl2setting" value="cl2setting2"/>
</appSettings>
</configuration>
有什么建议吗?
正如Ken Henderson所说,配置部分是另一种方法。然而,虽然它们有自己的优点,但它们需要编码,所以我觉得它并不理想。 (这可能最终成为最好的选择)
joseph.ferris建议在CodePlex(csd.codeplex.com)上查看配置部分设计器是好的。我发现了更多问题,在这里报道(如果有人感兴趣的话)http://csd.codeplex.com/discussions/278354
答案 0 :(得分:3)
我认为您要找的是自定义configuration section而不是appSettings。这通常被第三方库(log4net是首先想到的)用于提供通过app / web配置文件配置其设置的方法。请注意,这也为MS创建配置部分提供了基础。
我已经成功地在几个不同的项目中使用了这个项目,其中包括能够将新算法实现添加到分析程序的项目。
答案 1 :(得分:1)
您可以使用自己的命名约定来降低appSettings命名冲突的风险。和/或创建自定义配置部分。
<configuration>
<appSettings>
<add key="Shared.Setting1" value="..."/>
<add key="CL1.setting1" value="..."/>
<add key="CL1.setting2" value="..."/>
<add key="CL2.setting1" value="..."/>
<add key="CL2.setting2" value="..."/>
</appSettings>
</configuration>
我不确定管理员是否需要知道哪个设置属于哪个库,但是命名约定有助于促进逻辑分组 - 我会使用对管理员有意义的前缀,而不是说类库名称 - 例如“登录”。对于与日志记录相关的appSettings。
答案 2 :(得分:0)
Microsoft在其某些代码中使用冒号作为命名空间的分隔符。
他们的Azure samples示例。在这里,他们使用ida:
作为前缀。
ConfigurationManager.AppSettings["ida:ClientId"];
在Web.config文件的Microsoft ASP.NET中,您可以看到:
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>