ts-ioc-container 23.1.1 → 23.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -7
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -36,28 +36,124 @@ yarn add ts-ioc-container ts-constructor-injector reflect-metadata
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
## Injector
|
|
39
|
-
|
|
39
|
+
As long as injector is not part of container, you can use any injector you want (simple, proxy, based on reflection).
|
|
40
|
+
|
|
41
|
+
### Reflection injector (recommended)
|
|
40
42
|
|
|
41
43
|
```typescript
|
|
42
44
|
import { Container, IContainer, IInjector, Provider } from "ts-ioc-container";
|
|
43
|
-
import { resolve } from
|
|
45
|
+
import { inject, resolve } from "ts-constructor-injector";
|
|
46
|
+
import { by } from "ts-ioc-container/lib";
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
const injector: IInjector = {
|
|
49
|
+
resolve<T>(container: IContainer, Target: constructor<T>, ...deps: unknown[]): T {
|
|
50
|
+
return resolve(container)(Target, ...deps);
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
class Logger implements ILogger {
|
|
46
55
|
info(message: string) {
|
|
47
56
|
console.log(message);
|
|
48
57
|
}
|
|
49
58
|
}
|
|
50
59
|
|
|
60
|
+
class App {
|
|
61
|
+
constructor(@inject(by('ILogger')) private logger: ILogger) {
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
run() {
|
|
65
|
+
this.logger.info('Hello world');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const container = new Container(injector)
|
|
70
|
+
.register('ILogger', Provider.fromClass(Logger));
|
|
71
|
+
|
|
72
|
+
const app = container.resolve(App);
|
|
73
|
+
app.run();
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Simple injector
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
import { IContainer } from "ts-ioc-container";
|
|
80
|
+
|
|
51
81
|
const injector: IInjector = {
|
|
52
|
-
resolve<T>(container: IContainer,
|
|
53
|
-
return
|
|
82
|
+
resolve<T>(container: IContainer, Target: constructor<T>, ...deps: unknown[]): T {
|
|
83
|
+
return new Target(container, ...deps);
|
|
54
84
|
},
|
|
55
85
|
};
|
|
56
86
|
|
|
87
|
+
class Logger implements ILogger {
|
|
88
|
+
info(message: string) {
|
|
89
|
+
console.log(message);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
class App {
|
|
94
|
+
private logger: ILogger;
|
|
95
|
+
|
|
96
|
+
constructor(private container: IContainer) {
|
|
97
|
+
this.logger = container.resolve('ILogger');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
run() {
|
|
101
|
+
this.logger.info('Hello world');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
57
105
|
const container = new Container(injector)
|
|
58
106
|
.register('ILogger', Provider.fromClass(Logger));
|
|
59
|
-
|
|
60
|
-
|
|
107
|
+
|
|
108
|
+
const app = container.resolve(App);
|
|
109
|
+
app.run();
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Proxy injector
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import { IContainer } from "ts-ioc-container";
|
|
116
|
+
|
|
117
|
+
const injector: IInjector = {
|
|
118
|
+
resolve<T>(container: IContainer, Target: constructor<T>, ...deps: unknown[]): T {
|
|
119
|
+
const args = deps.reduce((acc, it) => ({ ...acc, ...it }), {});
|
|
120
|
+
const proxy = new Proxy(
|
|
121
|
+
{},
|
|
122
|
+
{
|
|
123
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
124
|
+
get(target: {}, prop: string | symbol): any {
|
|
125
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
126
|
+
return args.hasOwnProperty(prop) ? args[prop] : container.resolve(prop);
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
);
|
|
130
|
+
return new Target(proxy);
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
class Logger implements ILogger {
|
|
135
|
+
info(message: string) {
|
|
136
|
+
console.log(message);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
class App {
|
|
141
|
+
private logger: ILogger;
|
|
142
|
+
|
|
143
|
+
constructor({logger}: {logger: ILogger}) {
|
|
144
|
+
this.logger = logger;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
run() {
|
|
148
|
+
this.logger.info('Hello world');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const container = new Container(injector)
|
|
153
|
+
.register('logger', Provider.fromClass(Logger));
|
|
154
|
+
|
|
155
|
+
const app = container.resolve(App);
|
|
156
|
+
app.run();
|
|
61
157
|
```
|
|
62
158
|
|
|
63
159
|
## Provider
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-ioc-container",
|
|
3
|
-
"version": "23.1.
|
|
3
|
+
"version": "23.1.2",
|
|
4
4
|
"description": "Typescript IoC container",
|
|
5
5
|
"author": "ibabkin <igba14@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/IgorBabkin/ts-ioc-container/tree/master/packages/ts-ioc-container",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"ts-jest": "27.0.5",
|
|
49
49
|
"typescript": "4.4.3"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "783b900a3880d8a6caab523c1187a2d1c428c51a"
|
|
52
52
|
}
|