# HG changeset patch # User cin # Date 2020-07-17 10:08:53 # Node ID 142c5f6dc2b5779d377d3686b409c07126fc8b7c # Parent a19ad0acfd39ac871f1ffa38d65275a00ec00514 sync diff --git a/src/main/ts/di/Annotations.ts b/src/main/ts/di/Annotations.ts --- a/src/main/ts/di/Annotations.ts +++ b/src/main/ts/di/Annotations.ts @@ -56,24 +56,7 @@ interface Declaration dependency(name: K, opts?: DependencyOptions): DependencyRegistration; $type) => T>(target: C, ...params: P): StrictTypeRegistration; - - configure(): Config; } -type ServiceModule = { - [m in M]: Builder; -}; - -type PromiseOrValue = PromiseLike | T; - -export interface Config { - register(name: K, m: { $from: Promise> }): Config>; - register(name: K, m: { $from: Promise>, service: M }): Config>; - - register(name: K, m: Registration): Config>; - registerType( - name: K, $type: new (...args: ExtractDependency) => S[K], ...params: P): Config>; -} - export declare function declare(): Declaration; diff --git a/src/main/ts/di/fluent/interfaces.ts b/src/main/ts/di/fluent/interfaces.ts --- a/src/main/ts/di/fluent/interfaces.ts +++ b/src/main/ts/di/fluent/interfaces.ts @@ -1,5 +1,6 @@ import { primitive } from "../../safe"; import { ActivationType } from "../interfaces"; +import { Builder } from "../Annotations"; type ExtractService = K extends keyof S ? S[K] : K; @@ -12,11 +13,19 @@ type ExtractDependency = D extends type WalkDependencies = D extends primitive ? D : { [K in keyof D]: ExtractDependency }; +type ServiceModule = { + [m in M]: Builder; +}; + +type PromiseOrValue = T | PromiseLike; + export interface TypeBuilder { type

) => T>( target: C, ...params: P): ConstructorBuilder; factory

) => T>( target: F, ...params: P): FactoryBuilder; + wire(module: PromiseOrValue>, m: M): ServiceBuilder; + wire(module: PromiseOrValue>): ServiceBuilder; } export interface ServiceBuilder { diff --git a/src/test/ts/mock/config.ts b/src/test/ts/mock/config.ts --- a/src/test/ts/mock/config.ts +++ b/src/test/ts/mock/config.ts @@ -2,15 +2,17 @@ import { configure, dependency, Services import { Foo } from "./Foo"; import { Bar } from "./Bar"; import { Box } from "./Box"; -import { declare } from "../di/Annotations"; import { ConfigBuilder, TypeBuilder } from "../di/fluent/interfaces"; export declare function build(): TypeBuilder; export declare const config: ConfigBuilder; config - //.register("bar", { $from: import("./Bar"), service: "service" }) - // .register("box", { $from: import("./Box") }) + .register("bar", s => s + .wire(import("./Bar"), "service") + .inject("setName", "heell") + ) + .register("box", s => s.wire(import("./Box"))) .register("host", "example.com") // .registerType("bar2", Bar, [{ foo: dependency("foo"), host: "" }]); .register("bar2", s => s.type(Bar, diff --git a/src/test/ts/mock/services.ts b/src/test/ts/mock/services.ts --- a/src/test/ts/mock/services.ts +++ b/src/test/ts/mock/services.ts @@ -22,4 +22,4 @@ export interface Services { /** * Экспортируем вспомогательные функции для описания сервисов и кинфогурации */ -export const { define, dependency, configure, $type } = declare(); +export const { define, dependency } = declare();