目录
Domore.Conf使用类似于编程语言的语法简化了POCO类的配置,提供了设置配置的灵活性以及空格和不区分大小写的功能。
Domore.Conf 使用类似于编程语言但使用不那么严格的语法来配置POCO类。
这是介绍 Brows 如何利用简单文本进行配置和数据的系列文章中的第一篇。
请考虑以下类:
class MyConfig {
public string Theme { get; set; }
public DayOfWeek WeekendStartsOn { get; set; }
}
该类的配置文件可能如下所示:
My config . Theme = light
my config . Weekend starts on = Saturday
如果该配置文件与应用程序的.exe一起存在,其名称与.exe相同,但扩展名为 .conf 不同,则可以通过以下方式配置实例:
var obj = new MyConfig();
Conf.Configure(obj);
我相信你可以猜到输出会是什么:
Console.WriteLine(obj.Theme); // light
Console.WriteLine(obj.WeekendStartsOn); // Saturday
如果上面描述的文件命名约定令人困惑,这里有一个示例应该可以解决问题。名为my-process.exe的可执行文件将在同一目录中具有一个名为my-process.conf的配置文件。
到目前为止,事情似乎很简单。让我们让它们更简单。
将配置文件更改为如下所示:
Theme = dark
Weekend starts on = Saturday
并使用空键配置对象。
Conf.Configure(obj, key: "");
如果未提供密钥或提供null密钥,则该类型的名称将用于为配置属性添加前缀。如果传递空键(string.Empty),则每行都是一个潜在的配置属性。
这种行为带来了一些有趣的便利。假设上面的类是子类。
class PartyAnimal : MyConfig { }
class CollegeStudent : PartyAnimal { }
配置更改为:
Theme = dark
Weekend starts on = Friday
college student . weekend starts on = thursday
每个类的实例可以通过空白键和null键配置,也可以同时配置。
var pa = Conf.Configure(new PartyAnimal(), key: "");
var cs = Conf.Configure(new CollegeStudent(), key: "");
Conf.Configure(cs);
该大学生被配置了两次,首先使用一个空白键来收集所有MyConfig实例的通用配置,然后使用与类型名称匹配的键。输出如下:
Console.WriteLine(pa.Theme); // dark
Console.WriteLine(pa.WeekendStartsOn); // Friday
Console.WriteLine(cs.Theme); // dark
Console.WriteLine(cs.WeekendStartsOn); // Thursday
派对动物和大学生的主题配置相同,但大学生在周末的开始日有更具体的配置。
请注意,每种类型的新实例都传递给了Conf.Configure。从该方法返回了相同的实例。
让我们设定一些到目前为止我们已经看到的规则
- 将忽略配置键中的空格。
- 配置键不区分大小写。
- 配置关键部件由点(.)分隔。
现在让我们把那个大学生收拾干净,送他去上课。
class CollegeStudent {
public List<DayOfWeek> ClassSchedule { get; set; }
}
可以使用此.conf文件配置课程表。
student.class schedule[0] = monday
student.class schedule[1] = wednesday
student.class schedule[2] = friday
但这有点笨拙。像这样,它更具可读性,也更容易维护。
student.class schedule = monday, Wednesday, Friday
在上面的示例中,既没有使用空键,也没有使用类型名称作为键。相反,student可以通过使用任意键调用Conf.Configure来使用,即:
Conf.Configure(new CollegeStudent(), key: "student")
大学不是那么容易。它有点复杂。
class CollegeProfessor {
public string Name { get; set; }
}
class CollegeClass {
public CollegeProfessor Professor { get; set; }
public List<DayOfWeek> Schedule { get; set; }
public TimeSpan Time { get; set; }
}
class CollegeStudent {
public Dictionary<string, CollegeClass> Class { get; set; }
}
可以通过调用以下命令使用此.conf文件配置该学生的日程安排:
Conf.Configure(new CollegeStudent(), key: "")
class[Chemistry 101].time = 8:00
class[Chemistry 101].schedule = Monday, Wednesday, Friday
class[Chemistry 101].professor.name = Marie Curie
class[ Physics 200 ].time = 10:30
class[ Physics 200 ].schedule = Tuesday, Wednesday
class[ Physics 200 ].professor.name = Georges Lemaître
字典键遵循一些与标准键不同的规则。
- 键前后的空格将被忽略。
- 键中的空格将受到尊重。
- 尊重案例。若要忽略字典键的大小写,请使用不区分大小写的比较器创建它。
new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
现在就是这样,但还有更多内容要介绍。
在以后的文章中,我将介绍自定义配置解析、配置配置的属性,以及反转将POCO类转换为配置文件的整个过程。
本文最初发表于 https://brows.app/feed.xml
https://www.codeproject.com/Articles/5377687/Configure-NET-Apps-without-JSON-or-XML