服务器端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
):