测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2016年9月 |
SPM支持 SPM | ✓ |
由 Valentin Knabel 维护。
依赖 | |
EasyInject | ~> 0.8 |
ValidatedExtension | ~> 4.0 |
ValidatedInjectAdditions 为使用 EasyInject 和 ValidatedExtension 的项目添加了一些便捷方法。
EasyInject 是一个仅支持 Swift 的项目,支持 Swift Package Manager、Carthage 和 CocoaPods。
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 文件。