Ra: Dependency Injection in swift
From wikipedia:
All forms of life were believed to have been created by Ra, who called each of them into existence by speaking their secret names. Alternatively humans were created from Ra's tears and sweat, hence the Egyptians call themselves the "Cattle of Ra."
import Ra
let injector = Ra.Injector()
injector.create(NSObject) // returns an NSObject, no need to cast
injector.bind("test", to: "result")
injector.create("test") // returns "result", must cast.
injector.bind("test") { injector in
return ["hello": "world"]
}
injector.create("test") // returns ["Hello": "world"], is evaluated/created when this is called.
// note that this just overwrote the previous binding.
injector.removeBinding("test")
injector.create("test") // returns nil
For Swift 2.0/2.1
github "younata/Ra"
For Swift 1.2
github "younata/Ra" ~= 0.3
For Swift 1.1
github "younata/Ra" == 0.1.0
Make sure that use_frameworks!
is defined in your Podfile
For Swift 2.0/2.1
pod "Ra" :git => "https://github.com/younata/Ra.git"
For Swift 1.2
pod "Ra" :git => "https://github.com/younata/Ra.git", :tag => "v0.3.2"
For Swift 1.1
pod "Ra" :git => "https://github.com/younata/Ra.git", :tag => "0.1.0"
add .Package(url: "https://github.com/younata/Ra", majorVersion: 1)
to the dependencies array in your Package.swift
file.
=======
injector.bind(NSObject, toInstance: NSObject())
injector.create(NSObject) === injector.create(NSObject) // true
struct MyStruct {
var myValue = 10
init() {}
}
var myStruct = MyStruct()
myStruct.myValue = 100
injector.bind(MyStruct, toInstance: myStruct)
injector.create(MyStruct)?.myValue // 10
Type.self
is no longer necessary when using type names.init(modules: InjectorModule...)
to configure with any number of objects that confirm to InjectorModule. Note that if there are any conflicts in which injectormodule binds which, the last one to be passed in will succeed.AnyClass
or String
. Otherwise they either silently fail, or return nil.-create:
now returns type AnyObject?
, in the event that the object isn't already registered and isn't a subclass of NSObject=======