ValidatedInjectAdditions 0.3.0

ValidatedInjectAdditions 0.3.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2016年9月
SPM支持 SPM

Valentin Knabel 维护。



 
依赖
EasyInject~> 0.8
ValidatedExtension~> 4.0
 

ValidatedInjectAdditions 为使用 EasyInjectValidatedExtension 的项目添加了一些便捷方法。

安装

EasyInject 是一个仅支持 Swift 的项目,支持 Swift Package Manager、Carthage 和 CocoaPods

Swift Package Manager

import PackageDescription

let package = Package(
    name: "YourPackage",
    dependencies: [
        .Package(url: "https://github.com/vknabel/EasyInject.git", majorVersion: 0, minor: 6),
        .Package(url: "https://github.com/vknabel/ValidatedExtension.git", majorVersion: 3, minor: 0),
        .Package(url: "https://github.com/vknabel/ValidatedInjectAdditions.git", majorVersion: 0, minor: 2)
    ]
)

示例

此代码片段是在 (EasyInject)[https://www.github.com/vknabel/EasyInject/README.md]'s 示例之上构建的。

import EasyInject
import ValidatedExtension
import ValidatedInjectAdditions

// Define your a Validator as known from ValidatedExtension
struct NetworkServiceInjectorValidator: Validator {
    typealias WrappedType = AnyInjector<String>
    static func validate(_ value: AnyInjector<String>) throws -> Bool {
        let base = try value.resolving(from: .baseUrl)
        return URL(string: base)
            .flatMap({ _ in true })
            ?? false
    }
}

// Add properties to Validated<NetworkServiceInjectorValidator>
extension ValidatedType where ValidatorType == NetworkServiceInjectorValidator {
    var baseUrl: String {
        return try! value.resolving(from: .baseUrl)
    }
}

final class NetworkService: Providable, ValidatedDependency {
    // Declare your dependency
    typealias DependencyValidator = NetworkServiceInjectorValidator

    let baseUrl: String
    init<VT : ValidatedType where VT.ValidatorType == DependencyValidator>(validated dependencies: VT) {
        // Just focus on setting thing up 
        baseUrl = dependencies.baseUrl
    }
}

var injector = LazyInjector<String>().globalize().erase()
injector.provide(for: .baseUrl, usingFactory: { _ in "https://my.base.url/" })

// this will throw an error if .baseUrl is missing
// Otherwise initializes NetworkService
let networkService = try NetworkService(injector: &injector)

作者

Valentin Knabel, [email protected]

许可证

ValidatedInjectAdditions 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。