更换配置框架,寻找替代方案
本文关键字:方案 寻找 配置 框架 | 更新日期: 2023-09-27 18:28:40
几年来,我一直在使用以下自制的配置框架来管理我的项目配置:
-
第一个文件模仿Java的
.properties
文件(一堆支持集合的supergroup.subgroup.property=value
行),适用于许多情况(我发现它最适合小型应用程序)。这一款适用于配置非常简单的 -
第二个基于
DataContractSerializer
(以及可选的XmlSerializer
),它允许第一个的所有功能,并具有XML的所有好处和更少的管道功能。这是一个很好的,但不切实际,管理起来很麻烦,没有一个明确的UI来减轻教最终用户修改XML的麻烦。
现有的两个框架都可以毫无问题地封送到POCO和从POCO封送,以允许通过属性/字段(分别通过手动/自动序列化)访问配置值,因此作为开发人员,它们非常容易使用。
现在我正在审查他们启用数据库和流畅配置的能力,我正在寻找一个开箱即用(最好是开源)的替代方案。如果我能减少不必要的代码重复,并允许他们访问数据库和流畅的配置(除了他们现有的能力),我对重新设计我所有现有的项目没有问题。
有什么建议吗?或者值得我自己推广一下以获得我想要的功能吗?
在我的研究中,我发现了这个可能重复的问题,Nini回答了这个问题,但它已经近两年没有更新了,只支持我已经涵盖的选项(无论如何都是基于它的文档)。我在研究中遗漏了什么吗?或者有更好的选择吗?
更新
我追求的明确功能是:
- XML文件
- INI/Java类
properties
文件 - 数据库(至少是MS SQL和SQLite,也可以是MySQL和任何其他你能想象到的)
- Fluent(不需要生成代码)
- 某种扩展API允许我添加自己的源代码
- 它肯定需要序列化到任何数据源/从任何数据源序列化才能通过属性/字段访问
- 枚举支持
如果现有框架足够开放,可以做我需要做的事情,我会有兴趣扩展它,但除此之外,它可能不太适合。
更新
现有System.Configuration
命名空间的功能非常好,我很熟悉它的工作效果,但总的来说,它不能满足我的要求。我使用过它(甚至在高级场景中),但它只允许有限的XML扩展性:这不是我想要的。
如果我必须给出任何预定义的功能,我会说流畅的配置是最不重要的(无论如何,要为它提供一个有价值的接口都是非常困难的)。我会在我发现的任何东西上拼凑一些东西。
事实上,它已经超过24小时(浏览量超过125次),没有人能够提供一个合理的替代告诉我,它可能不存在。我将自己开始,希望有人能提供一个有趣的替代方案。
创建一个通用配置管理器是一项非常艰巨的任务。这些年来,我还没有看到任何配置框架出现,我也不认为我会出现。只要看一下System.Configuration命名空间,你就会发现尝试匹配一组类似的功能是多么昂贵。大多数情况下,配置要求都是非常特定于项目的,没有什么灵丹妙药。
我的建议是坚持自己的解决方案,只要它很容易进行单元测试并能完成任务。
请查看Cinchoo配置框架,它提供了您想要的大部分功能。
以下是使用Cinchoo框架定义和使用配置对象的简单方法
namespace HelloWorld
{
#region NameSpaces
using System;
using Cinchoo.Core.Configuration;
#endregion NameSpaces
[ChoConfigurationSection("sample")]
public class SampleConfigSection : ChoConfigurableObject
{
[ChoPropertyInfo("name", DefaultValue="Mark")]
public string Name;
[ChoPropertyInfo("message", DefaultValue="Hello World!")]
public string Message;
}
static void Main(string[] args)
{
SampleConfigSection sampleConfigSection = new SampleConfigSection();
Console.WriteLine(sampleConfigSection.ToString());
}
}
第一次,当您运行应用程序时,Cinchoo框架会自动生成如下配置部分。然后,您可以通过配置源代码或代码来控制它们。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="sample" type="Cinchoo.Core.Configuration.ChoNameValueSectionHandler, Cinchoo.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7dacd80ff3e33de" />
</configSections>
<sample>
<add key="name" value="Mark" />
<add key="message" value="Hello World!" />
</sample>
</configuration>
我为您提供的解决方案位于Spring Framework.NET中,在其他伟大的功能中,它具有PropertyPlaceholderConfigurer类。
这个类的目的是将xml配置文件中的一些属性外部化。因此,相反,写下文字值(如连接字符串、密码或任何其他参数),您可以放置占位符,如${sql.server}、${sql.password},这些占位符将被外部值自动替换。
这些外部值可以在任何位置。以我公司为例,由于我们的遗留系统使用相同的值,我们将它们放在了windows注册表中(我显然不建议新项目使用)。
但是,请注意,这不是Spring的独立功能,它与Spring.Core一起提供,您必须使用Spring配置文件和依赖注入功能。
http://www.springframework.net/doc-latest/reference/html/objects.html#objects-工厂占位符配置程序