Provider协议为Vapor项目添加功能和第三方Package提供了一种简单而可预测的方法。
Adding a Provider
添加一个provider需要2~3步:Add Package、Import、Config(选)。
Add Package
Vapor的provider都以-provider
结尾,你可以在GitHub上搜索所有支持的Provider。
要将provider添加到你的程序中,需要在Package.swift
文件中将它作为依赖库添加进来:
let package = Package(
name: "MyApp",
dependencies: [
.Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 0),
.Package(url: "https://github.com/vapor/mysql-provider.git", majorVersion: 1, minor: 0)
]
)
添加新的package后,需要使用
vapor clean
或者vapor build --clean
。
Import
provider被添加之后,就可以使用import VaporFoo
来引入它,Foo
就是provider的名称。
比如引入MYSQL provider:
import Vapor
import VaporMySQL
let drop = Droplet()
try drop.addProvider(VaporMySQL.Provider.self)
// ...
drop.run()
每个provider都有一个Provider
类,在Droplet
的init
方法中,将这个类的类型添加到providers
数组中。
Config
有一些provider需要进行配置,比如VaporMySQL
需要一个Config/mysql.json
文件,内容如下:
{
"host": "localhost",
"user": "root",
"password": "",
"database": "vapor"
}
如果需要配置文件,你需要在Droplet初始化的时候接收错误异常。
Advanced
你可以选择自己初始化provider(初始化配置信息)。
import Vapor
import VaporMySQL
let drop = Droplet()
let mysql = try VaporMySQL.Provider(host: "localhost", user: "root", password: "", database: "vapor")
drop.addProvider(mysql)
...
drop.run()
Create a Provider
创建Provider很简单,你只需要创建一个遵守Vapor.Provider
协议的Provider
类的包。
🌰:这是一个Foo
package的provider,接收一条消息,然后在Droplet
启动的时候打印消息
import Vapor
public final class Provider: Vapor.Provider {
public let message: String
public let provided: Providable
public convenience init(config: Config) throws {
guard let message = config["foo", "message"].string else {
throw SomeError
}
try self.init(message: message)
}
public init(message: String) throws {
self.message = message
}
public func afterInit(_ drop: Droplet) {
}
public func beforeServe(_ drop: Droplet) {
drop.console.info(message)
}
}
这个provider需要一个Config/foo.json
文件进行配置:
{
"message": "The message to output"
}
也可以通过初始化方法init(message: String)
手动设置。
<b>总结</b>:Provider提供了引入外部文件的方法,这章也介绍了如何创建自定义的包文件。
网友评论