配置不带JSON或XML的.NET应用

目录

到目前为止,事情似乎很简单。让我们让它们更简单。

让我们设定一些到目前为止我们已经看到的规则

大学不是那么容易。它有点复杂。

现在就是这样,但还有更多内容要介绍。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值