##// END OF EJS Templates
sync
cin -
r126:142c5f6dc2b5 ioc ts support
parent child
Show More
@@ -56,24 +56,7 interface Declaration<S extends object>
56 56 dependency<K extends keyof S>(name: K, opts?: DependencyOptions<S[K]>): DependencyRegistration<S, K>;
57 57
58 58 $type<T, P extends any[], C extends new (...args: ExtractDependency<P, S>) => T>(target: C, ...params: P): StrictTypeRegistration<C, S>;
59
60 configure(): Config<S>;
61 59 }
62 60
63 type ServiceModule<T, S extends object, M extends string = "service"> = {
64 [m in M]: Builder<T, S>;
65 };
66
67 type PromiseOrValue<T> = PromiseLike<T> | T;
68
69 61
70 export interface Config<S extends object, Y extends keyof S = keyof S> {
71 register<K extends Y>(name: K, m: { $from: Promise<ServiceModule<S[K], S>> }): Config<S, Exclude<Y, K>>;
72 register<K extends Y, M extends string>(name: K, m: { $from: Promise<ServiceModule<S[K], S, M>>, service: M }): Config<S, Exclude<Y, K>>;
73
74 register<K extends Y>(name: K, m: Registration<S[K], S>): Config<S, Exclude<Y, K>>;
75 registerType<K extends Y, P extends any[]>(
76 name: K, $type: new (...args: ExtractDependency<P, S>) => S[K], ...params: P): Config<S, Exclude<Y, K>>;
77 }
78
79 62 export declare function declare<S extends object>(): Declaration<S>;
@@ -1,5 +1,6
1 1 import { primitive } from "../../safe";
2 2 import { ActivationType } from "../interfaces";
3 import { Builder } from "../Annotations";
3 4
4 5 type ExtractService<K, S> = K extends keyof S ? S[K] : K;
5 6
@@ -12,11 +13,19 type ExtractDependency<D, S> = D extends
12 13 type WalkDependencies<D, S> = D extends primitive ? D :
13 14 { [K in keyof D]: ExtractDependency<D[K], S> };
14 15
16 type ServiceModule<T, S extends object, M extends keyof any = "service"> = {
17 [m in M]: Builder<T, S>;
18 };
19
20 type PromiseOrValue<T> = T | PromiseLike<T>;
21
15 22 export interface TypeBuilder<T, S extends object> {
16 23 type<P extends any[], C extends new (...args: ExtractDependency<P, S>) => T>(
17 24 target: C, ...params: P): ConstructorBuilder<C, S>;
18 25 factory<P extends any[], F extends (...args: ExtractDependency<P, S>) => T>(
19 26 target: F, ...params: P): FactoryBuilder<F, S>;
27 wire<M extends keyof any>(module: PromiseOrValue<ServiceModule<T, S, M>>, m: M): ServiceBuilder<T, S>;
28 wire(module: PromiseOrValue<ServiceModule<T, S>>): ServiceBuilder<T, S>;
20 29 }
21 30
22 31 export interface ServiceBuilder<T, S extends object> {
@@ -2,15 +2,17 import { configure, dependency, Services
2 2 import { Foo } from "./Foo";
3 3 import { Bar } from "./Bar";
4 4 import { Box } from "./Box";
5 import { declare } from "../di/Annotations";
6 5 import { ConfigBuilder, TypeBuilder } from "../di/fluent/interfaces";
7 6
8 7 export declare function build<T>(): TypeBuilder<T, Services>;
9 8
10 9 export declare const config: ConfigBuilder<Services>;
11 10 config
12 //.register("bar", { $from: import("./Bar"), service: "service" })
13 // .register("box", { $from: import("./Box") })
11 .register("bar", s => s
12 .wire(import("./Bar"), "service")
13 .inject("setName", "heell")
14 )
15 .register("box", s => s.wire(import("./Box")))
14 16 .register("host", "example.com")
15 17 // .registerType("bar2", Bar, [{ foo: dependency("foo"), host: "" }]);
16 18 .register("bar2", s => s.type(Bar,
@@ -22,4 +22,4 export interface Services {
22 22 /**
23 23 * Экспортируем вспомогательные функции для описания сервисов и кинфогурации
24 24 */
25 export const { define, dependency, configure, $type } = declare<Services>();
25 export const { define, dependency } = declare<Services>();
General Comments 0
You need to be logged in to leave comments. Login now