美文网首页swift-server
Vapor文档学习十:Provider

Vapor文档学习十:Provider

作者: Supremodeamor | 来源:发表于2017-04-20 11:46 被阅读135次

    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提供了引入外部文件的方法,这章也介绍了如何创建自定义的包文件。

    相关文章

      网友评论

        本文标题:Vapor文档学习十:Provider

        本文链接:https://www.haomeiwen.com/subject/knnkzttx.html