Skip to content

onmyway133/Resolver

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
Pod
 
 
 
 
 
 
 
 
 
 

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.