Vapor文档学习十:Provider

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类,在Dropletinit方法中,将这个类的类型添加到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类的包。

:这是一个Foopackage的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)手动设置。

总结:Provider提供了引入外部文件的方法,这章也介绍了如何创建自定义的包文件。

你可能感兴趣的:(Vapor文档学习十:Provider)