Skip to content

onmyway133/Resolver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Resolver

❤️ Support my app ❤️

❤️❤️😇😍🤘❤️❤️

A simple resolver for Swift

[![CI Status](http://img.shields.io/travis/Khoa Pham/Resolver.svg?style=flat)](https://travis-ci.org/Khoa Pham/Resolver) Version License Platform

Usage

To run the example project, clone the repo, and run pod install from the Example directory first.

Features

Taking example from Swinject

Supposed we have classes and protocols like this

protocol AnimalType {
    var name: String? { get }
}

class Cat: AnimalType {
    let name: String?

    init(name: String?) {
        self.name = name
    }
}

protocol PersonType {
    var pet: AnimalType { get }
    func play() -> String
}

class PetOwner: PersonType {
    let pet: AnimalType

    init(pet: AnimalType) {
        self.pet = pet
    }

    func play() -> String {
        let name = pet.name ?? "someone"
        return "I'm playing with \(name)."
    }
}

Simple factory

let resolver = Resolver()
resolver.register {
    Cat(name: "tom") as AnimalType
}

let cat = try! resolver.resolve() as AnimalType
XCTAssert(cat.name == "tom")

Tag

let resolver = Resolver()
resolver.register(tag: "tom") {
    Cat(name: "tom") as AnimalType
}

resolver.register(tag: "meo") {
    Cat(name: "meo") as AnimalType
}

let tom = try! resolver.resolve(tag: "tom") as AnimalType
let meo = try! resolver.resolve(tag: "meo") as AnimalType

XCTAssert(tom.name == "tom")
XCTAssert(meo.name == "meo")

Argument

let resolver = Resolver()

resolver.register {
    Cat(name: "tom") as AnimalType
}

resolver.register { cat in
    PetOwner(pet: cat) as PersonType
}

let cat = try! resolver.resolve() as AnimalType
let owner = try! resolver.resolve(arg1: cat) as PersonType

XCTAssert(owner.pet.name == "tom")
XCTAssert(owner.play() == "I'm playing with tom.")

Singleton

let cat = Cat(name: "tom") as AnimalType

let resolver = Resolver()
resolver.registerSingleton(cat)

let someCat = try! resolver.resolve() as AnimalType
XCTAssert(someCat as! Cat === cat as! Cat)

Installation

Resolver is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "Resolver"

Author

Khoa Pham, onmyway133@gmail.com

License

Resolver is available under the MIT license. See the LICENSE file for more info.