##// END OF EJS Templates
sync
cin -
r123:264497557e79 ioc ts support
parent child
Show More
@@ -65,7 +65,7 interface Declaration<S extends object>
65 dependency<K extends keyof S>(name: K, opts: LazyDependencyOptions<S[K]>): Lazy<K>;
65 dependency<K extends keyof S>(name: K, opts: LazyDependencyOptions<S[K]>): Lazy<K>;
66 dependency<K extends keyof S>(name: K, opts?: DependencyOptions<S[K]>): Dependency<K>;
66 dependency<K extends keyof S>(name: K, opts?: DependencyOptions<S[K]>): Dependency<K>;
67
67
68 config(): Config<S>;
68 configure(): Config<S>;
69 }
69 }
70
70
71 type ServiceModule<T, S extends object, M extends string = "service"> = {
71 type ServiceModule<T, S extends object, M extends string = "service"> = {
@@ -74,11 +74,11 type ServiceModule<T, S extends object,
74
74
75 type PromiseOrValue<T> = PromiseLike<T> | T;
75 type PromiseOrValue<T> = PromiseLike<T> | T;
76
76
77
77 export interface Config<S extends object, Y extends keyof S = keyof S> {
78 export interface Config<S extends object, Y extends keyof S = keyof S> {
78 register<K extends Y>(name: K, builder: Builder<S[K], S>): Config<S, Exclude<Y, K>>;
79 register<K extends Y>(name: K, m: { $from: Promise<ServiceModule<S[K], S>> } | S[K]): Config<S, Exclude<Y, K>>;
79 register<K extends Y>(name: K, m: Promise<ServiceModule<S[K], S>>): Config<S, Exclude<Y, K>>;
80 register<K extends Y, M extends string>(name: K, m: { $from: Promise<ServiceModule<S[K], S, M>>, service: M }): Config<S, Exclude<Y, K>>;
80 register<K extends Y, M extends string>(name: K, m: Promise<ServiceModule<S[K], S, M>>, x: M): Config<S, Exclude<Y, K>>;
81 register<K extends Y, C extends new (...args: any) => S[K]>(name: K, d: TypeRegistration<C, S>): Config<S, Exclude<Y, K>>;
81
82 }
82 }
83
83
84 export declare function declare<S extends object>(): Declaration<S>;
84 export declare function declare<S extends object>(): Declaration<S>;
@@ -46,6 +46,7 export interface ServiceRegistration<T,
46
46
47 export interface TypeRegistration<C extends new () => any, S extends object> extends ServiceRegistration<InstanceType<C>, S> {
47 export interface TypeRegistration<C extends new () => any, S extends object> extends ServiceRegistration<InstanceType<C>, S> {
48 $type: string | C;
48 $type: string | C;
49 params?: ConstructorParameters<C>;
49 }
50 }
50
51
51 export interface FactoryRegistration<F extends () => any, S extends object> extends ServiceRegistration<ReturnType<F>, S> {
52 export interface FactoryRegistration<F extends () => any, S extends object> extends ServiceRegistration<ReturnType<F>, S> {
@@ -1,6 +1,15
1 import { config } from "./services";
1 import { configure } from "./services";
2 import { Foo } from "./Foo";
3 import { Bar } from "./Bar";
2
4
3 config()
5 export const config = configure()
4 .register("bar", import("./Bar"))
6 .register("bar", { $from: import("./Bar"), service: "service" })
5 .register("box", import("./Box"), "service");
7 .register("box", { $from: import("./Box") })
6 // .register("foo", import("./Foo"), "Foo");
8 .register("host", "example.com")
9 .register("foo", {
10 $type: Foo
11 })
12 .register("bar2", {
13 $type: Bar,
14 params: []
15 });
@@ -11,6 +11,8 export interface Services {
11
11
12 bar: Bar;
12 bar: Bar;
13
13
14 bar2: Bar;
15
14 box: Box<Bar>;
16 box: Box<Bar>;
15
17
16 host: string;
18 host: string;
@@ -20,4 +22,4 export interface Services {
20 /**
22 /**
21 * Экспортируем вспомогательные функции для описания сервисов и кинфогурации
23 * Экспортируем вспомогательные функции для описания сервисов и кинфогурации
22 */
24 */
23 export const { define, dependency, config } = declare<Services>();
25 export const { define, dependency, configure } = declare<Services>();
General Comments 0
You need to be logged in to leave comments. Login now