服务器端Swift-配置文件

在前两篇文章中,我描述了如何向服务器端Swift HTTP服务器添加MVC模式(带有单元测试)。 在本文中,我将展示如何向应用程序添加对配置文件的支持。

配置框架

在ASP.NET Core MVC应用程序中,Microsoft添加了对读取配置文件(以及环境变量,命令参数等)的支持,语法和想法看起来很酷。 下面是可用于读取Microsoft框架中的配置的代码示例。

我想在我的Swift应用程序中实现类似的构造。 决定哪些参数最重要(基于执行方法的顺序)非常重要。 我想订购: file -> system environment -> command parameters 。 首先,我认为我必须自己创建这些类,但是后来我发现IBM创建了一个非常好的库。

IBM-Swift /配置

配置–用于Swift应用程序的分层配置管理器

github.com

这确实是一个很好的框架,可以满足我的所有要求。 它与Microsoft解决方案非常相似。

读取配置

要从我想支持的所有地方读取配置,我们必须将以下代码添加到我们的main.swift文件中。

BasePath.pwd指定为relativeFrom参数很重要。 它是当前工作目录( PWD )的相对路径。

我的整个main.swift文件现在看起来像这样:

使用IBM的框架读取配置后,我将配置设置转录为自己的对象-该对象仅将我在应用程序中使用的配置存储为属性。 因此,我将在应用程序中使用真实的类属性,而不是字符串键。 我将拥有智能感知和更轻松的重构。 为此,我创建了ConfigurationManager类的简单扩展。 仅根据管理器的属性创建Configuratio对象。

我的Configuration对象真的很简单。 它存储了我可以在整个应用程序中使用的所有配置属性。

我的configuration.json对应于上述类,如下所示:

我们必须将该文件放在Package.swift文件附近。 当我们在Xcode中工作时,这一点很重要,因为此文件夹是当前工作文件夹,并且ConfigurationManager会正确找到此文件。 重建可执行文件后,我们的配置文件必须放在该文件附近。

依赖注入

现在,我已将所有配置存储在专门为此目的创建的对象中。 现在,我希望有一种方法可以在需要访问配置设置的所有地方使用该配置。 当然,最好的解决方案是依赖注入。 我将在我的依赖项容器中注册我的配置对象,并且我可以在任何需要的地方解析配置。 可以按照以下代码进行注册。

我正在将配置注册为单例。 现在我们可以例如通过注入构造函数来解析配置:

因此,在我的TaskRepository我注入了配置对象,并且可以使用该对象中的所有属性。


现在,我已经实现了可用于存储对数据库的访问信息的机制。 在下一篇文章中,我将使用该信息来准备连接以及从实际数据库(使用某些ORM框架)读取/写入对象。


您可以在我的GitHub项目中找到所有源代码(分支configuration ):

mczachurski / TaskServerSwift

TaskServerSwift –演示项目,其中包含用Swift编写的服务器端代码。

github.com