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)手动设置。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,971评论 6 342
  • 前往 Vapor 2.0 - 文档目录 Provider协议为向您的Vapor项目添加功能和第三方库创建了一种简单...
    韩云智VL阅读 464评论 0 0
  • 说明:这系列文章都是基于Vapor文档的理解与翻译,仅供个人学习使用。 Hello world 关于如何安装Vap...
    Supremodeamor阅读 1,711评论 0 1
  • 我家也想有张琴,或在高山或在林。 每欲兴来声袅袅,但思财力暗喑喑。 清风明月骚人趣,材米油盐我辈心。 梦想自然不敢...
    指间听琴阅读 271评论 0 3