Skip to content

Commit 11f18d4

Browse files
committed
fixed documentation
1 parent f1c7c52 commit 11f18d4

File tree

2 files changed

+20
-24
lines changed

2 files changed

+20
-24
lines changed

Dip/Dip/Dip.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,16 @@ public class DependencyContainer {
8888
- parameter factory: generic factory that should be used to create concrete instance of type
8989
- parameter scope: scope of the component. Default value is `Prototype`
9090

91-
-note: You should not call this method directly, instead call any of other `register` methods. You _should_ use this method only to register dependency with more runtime arguments than _Dip_ supports (currently it's up to six). Though before you do that you should probably review your design and try to reduce number of depnedencies.
91+
-note: You should not call this method directly, instead call any of other `register` methods. You _should_ use this method only to register dependency with more runtime arguments than _Dip_ supports (currently it's up to six) like in this example:
9292

93-
**Example**
9493
```swift
95-
public func register<T, Arg1, Arg2, Arg3, ...>(tag: Tag? = nil, factory: (Arg1, Arg2, Arg3, ...) -> T) {
96-
register(tag, factory: factory, scope: .Prototype) as DefinitionOf<T>
94+
public func register<T, Arg1, Arg2, Arg3, ...>(tag: Tag? = nil, factory: (Arg1, Arg2, Arg3, ...) -> T) -> DefinitionOf<T> {
95+
return register(tag, factory: factory, scope: .Prototype) as DefinitionOf<T>
9796
}
9897
```
98+
99+
Though before you do that you should probably review your design and try to reduce number of depnedencies.
100+
99101
*/
100102
public func register<T, F>(tag tag: Tag? = nil, factory: F, scope: ComponentScope) -> DefinitionOf<T> {
101103
let key = DefinitionKey(protocolType: T.self, factoryType: F.self, associatedTag: tag)

README.md

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -108,35 +108,29 @@ You can register factories that accept up to six arguments. When you resolve dep
108108

109109
```swift
110110
let webServices = DependencyContainer() { webServices in
111-
webServices.register { (url: NSURL, port: Int) in WebService(name: "1", baseURL: url, port: port) as WebServiceAPI }
112-
webServices.register { (port: Int, url: NSURL) in WebService(name: "2", baseURL: url, port: port) as WebServiceAPI }
113-
webServices.register { (port: Int, url: NSURL?) in WebService(name: "3", baseURL: url!, port: port) as WebServiceAPI }
111+
webServices.register { (url: NSURL, port: Int) in WebServiceImp1(url, port: port) as WebServiceAPI }
112+
webServices.register { (port: Int, url: NSURL) in WebServiceImp2(url, port: port) as WebServiceAPI }
113+
webServices.register { (port: Int, url: NSURL?) in WebServiceImp3(url!, port: port) as WebServiceAPI }
114114
}
115115

116-
let service1 = webServices.resolve(NSURL(string: "http://example.url")!, 80) as WebServiceAPI // service1.name == "1"
117-
let service2 = webServices.resolve(80, NSURL(string: "http://example.url")!) as WebServiceAPI // service1.name == "2"
118-
let service3 = webServices.resolve(80, NSURL(string: "http://example.url")?) as WebServiceAPI // service1.name == "3"
116+
let service1 = webServices.resolve(NSURL(string: "http://example.url")!, 80) as WebServiceAPI // service1 is WebServiceImp1
117+
let service2 = webServices.resolve(80, NSURL(string: "http://example.url")!) as WebServiceAPI // service2 is WebServiceImp2
118+
let service3 = webServices.resolve(80, NSURL(string: "http://example.url")) as WebServiceAPI // service3 is WebServiceImp3
119119

120120
```
121+
Though Dip provides support for up to six runtime arguments out of the box you can extend this number using following code snippet for seven arguments:
121122

122-
### Runtime arguments
123-
124-
You can register factories that accept up to six arguments. When you resolve dependency you can pass those arguments to `resolve()` method and they will be passed to the factory. Note that _number_, _types_ and _order_ of parameters matters. Also use of optional parameter and not optional parameter will result in two factories registered in container.
125-
126-
```swift
127-
let webServices = DependencyContainer() { webServices in
128-
webServices.register { (url: NSURL, port: Int) in WebService(name: "1", baseURL: url, port: port) as WebServiceAPI }
129-
webServices.register { (port: Int, url: NSURL) in WebService(name: "2", baseURL: url, port: port) as WebServiceAPI }
130-
webServices.register { (port: Int, url: NSURL?) in WebService(name: "3", baseURL: url!, port: port) as WebServiceAPI }
123+
```
124+
func register<T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>(tag: Tag? = nil, factory: (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) -> T) -> DefinitionOf<T> {
125+
return register(tag, factory: factory, scope: .Prototype) as DefinitionOf<T>
126+
}
127+
128+
func resolve<T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>(tag tag: Tag? = nil, _ arg1: Arg1, _ arg2: Arg2, _ arg3: Arg3, _ arg4: Arg4, _ arg5: Arg5, _ arg6: Arg6, _ arg7: Arg7) -> T {
129+
return resolve(tag) { (factory: (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) -> T) in factory(arg1, arg2, arg3, arg4, arg5, arg6, arg7) }
131130
}
132-
133-
let service1 = webServices.resolve(NSURL(string: "http://example.url")!, 80) as WebServiceAPI // service1.name == "1"
134-
let service2 = webServices.resolve(80, NSURL(string: "http://example.url")!) as WebServiceAPI // service1.name == "2"
135-
let service3 = webServices.resolve(80, NSURL(string: "http://example.url")) as WebServiceAPI // service1.name == "3"
136131
137132
```
138133

139-
140134
### Concrete Example
141135

142136
Somewhere in your App target, register the dependencies:

0 commit comments

Comments
 (0)