SwinjectPropertyLoader 1.0.0

SwinjectPropertyLoader 1.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Jakub VanoMark DiFrancoYoichi TagayaMaxim Chipeev 维护。



  • Swinject 贡献者

SwinjectPropertyLoader

SwinjectPropertyLoader 是 Swinject 的一个扩展,它可以从与您的应用程序或框架捆绑的资源中加载属性值。

要求

  • iOS 8.0+ / Mac OS X 10.10+ / watchOS 2.0+ / tvOS 9.0+
  • Swift 2.2 或 2.3
    • Xcode 7.0+

  • Swift 3.0.x
    • Xcode 8.0+

  • Carthage 0.18+(如果您使用的话)
  • CocoaPods 1.1.1+(如果您使用的话)

安装

Swinject 通过 Carthage 或 CocoaPods 提供。

属性

属性是可以从与应用程序/框架捆绑的资源中加载的值。然后可以在容器中构建定义时使用这些属性。

支持两种类型的属性格式:

  • JSON(《JsonPropertyLoader》)
  • Plist(《PlistPropertyLoader》)

每种格式都支持该格式本身指定的类型。如果使用 JSON 格式,则支持以下基本类型:`Bool`、`Int`、`Double`、`String`、`Array` 和 `Dictionary`。对于 Plist,支持 Plist 所支持的所有类型,包括所有 JSON 类型、`NSDate` 和 `NSData`。

JSON 属性文件还支持注释,这允许您为您提供的属性键名称以外的属性提供更多上下文。例如

{
    // Comment type 1
    "foo": "bar",

    /* Comment type 2 */
    "baz": 100,

    /**
     Comment type 3
     */
    "boo": 30.50
}

将属性加载到容器中就像这样简单

let container = Container()

// will load "properties.json" from the main app bundle
let loader = JsonPropertyLoader(bundle: .mainBundle(), name: "properties")

try! container.applyPropertyLoader(loader)

现在您可以将属性注入到容器中注册的定义中。

考虑以下定义

class Person {
    var name: String!
    var count: Int?
    var team: String = ""
}

假设我们的 `properties.json` 文件包含以下内容

{
    "name": "Mike",
    "count": 100,
    "team": "Giants"
}

然后我们可以使用以下方式注册此 Service 类型

container.register(Person.self) { r in
    let person = Person()
    person.name = r.property("name")
    person.count = r.property("count")
    person.team = r.property("team")!
}

这将解决这个人的属性

let person = container.resolve(Person.self)!
person.name // "Mike"
person.count // 100
person.team // "Giants"

属性对每个容器都是可用的。可以将多个属性加载器应用于单个容器。属性将按照它们应用于容器的顺序合并。例如,假设您有两个属性文件

{
    "message": "hello from A",
    "count": 10
}

并且

{
    "message": "hello from B",
    "timeout": 4
}

如果我们先应用属性文件 A,然后应用属性文件 B 到容器中,那么生成的属性键值对将是

message = "hello from B"
count = 10
timeout = 4

如您所见,message属性已被覆盖。这只适用于第一级属性,这意味着DictionaryArray不会被合并。例如

{
    "items": [
        "hello from A"
    ]
}

并且

{
     "items": [
        "hello from B"
     ]
}

items的结果值会是:[ "来自 B 的问候" ]

贡献者

SwinjectPropertyLoader最初由Mike Owens编写。

许可证

MIT许可证。有关详细信息,请参阅许可证文件