Issue #2

When I was reading through Swinject, I found something interesting

public convenience init(parent: Container? = nil, registeringClosure: (Container) -> Void) {
  self.init(parent: parent)

The init has a closure that makes configuration easy, much like a Builder pattern. So I think we can learn from that and make a Configurable protocol

protocol Configurable: class {}

extension Configurable {
  func config(block: (Self) -> Void) -> Self {
    return self

extension NSObject : Configurable {}

With this, we can init some class with less hassle

let view = UIView().config {
  $0.backgroundColor = .white
  $0.layer.cornerRadius = 2