Kontena 0.2.0

Kontena 0.2.0

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Mar 2015
SPMSupports SPM

Maintained by Vadym Markov.



Kontena 0.2.0

Kontena (コンテナ)

IOC container in Swift

A simple Swift implementation of Service Locator / IOC container with limited DI functionality. Works well with Swift and Objective C classes.

Additional notes

  • If you want to bind Swift protocol you must add @objc annotation.
  • Your bound object must inherit from NSObject to let the container automatically resolve dependencies.
  • Swift 1.2 is required to use this library.

Usage

Create the container

import Kontena

let container = Container() // init
let sharedContainer = Container.sharedInstance // as singleton

Merge two containers

// all bound objects from container2
// are merged and added to container1
container1.mergeWithContainer(container2)

Clear the container

container.clear()

Let the container automatically resolve dependencies of bound objects

container.resolveDependencies = true

Bind/register the instance/factory

@objc protocol SomeProtocol {}
class SomeBaseClass: NSObject {}
class SomeClass: SomeBaseClass, SomeProtocol {}

var instance = SomeClass()

// as singleton to the type of the instance
container.bind(instance)
// as singleton to the superclass type
container.bind(instance, toType: SomeBaseClass.self)
// as singleton to the protocol
container.bind(instance, toType: SomeProtocol.self)
// as singleton to the key
container.bind(instance, toKey: "some")

// factory = closure where the object is initialized
let factory = {
  () -> SomeClass in
  let some = SomeClass()
  // basic initialization
  return some
}

// to the type of the instance
container.bindFactory(factory)
// to the type of the instance
container.bindFactory(factory, toType: SomeBaseClass.self)
// to the protocol
container.bindFactory(factory, toType: SomeProtocol.self)
// to the key
container.bindFactory(factory, toKey: "some")

// you can bind factory as singleton as well
container.bindFactory(factory).asSingleton()

Resolve the object

Resolved object or nil is returned. If the factory was bound then object will be initialized lazily (for factories with the singleton scope - only at the first resolve call, for the prototype scope - at every resolve call).

If resolveDependencies was set to true then container will try to automatically resolve dependencies of the requested object (if they are already registered in the container and the requested object is a subclass of NSObject).

var resolvedByType = container.resolveType(SomeClass.self)
var resolvedByKey = container.resolveKey(key)

Using of custom operators

var instance = SomeClass()
var resolvedInstance: SomeClass?

// should be bound to the shared container
Container.sharedInstance.bind(instance)

// Resolve and inject from the container
-->resolvedInstance // prefix operator
resolvedInstance<-- // postfix operator

Installation

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

pod 'Kontena'

Author

Vadym Markov, [email protected]

License

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