diff --git a/packages/core/src/context/applicationContext.ts b/packages/core/src/context/applicationContext.ts index 6df96fb45b7c..25fac445e52b 100644 --- a/packages/core/src/context/applicationContext.ts +++ b/packages/core/src/context/applicationContext.ts @@ -179,7 +179,9 @@ export class BaseApplicationContext return false; } - get(identifier: ObjectIdentifier, args?: any): T { + get(identifier: { new (): T }, args?: any): T; + get(identifier: ObjectIdentifier, args?: any): T; + get(identifier: any, args?: any): any { // 因为在这里拿不到类名, NotFoundError 类的错误信息在 ManagedResolverFactory.ts createAsync 方法中增加错误类名 identifier = parsePrefix(identifier); @@ -197,7 +199,7 @@ export class BaseApplicationContext throw new Error(`${identifier} must use getAsync`); } - return this.parent.get(identifier, args); + return this.parent.get(identifier, args); } if (!definition) { throw new NotFoundError(identifier); @@ -205,7 +207,9 @@ export class BaseApplicationContext return this.getManagedResolverFactory().create({ definition, args }); } - async getAsync(identifier: ObjectIdentifier, args?: any): Promise { + async getAsync(identifier: { new (): T }, args?: any): Promise; + async getAsync(identifier: ObjectIdentifier, args?: any): Promise; + async getAsync(identifier: any, args?: any): Promise { // 因为在这里拿不到类名, NotFoundError 类的错误信息在 ManagedResolverFactory.ts createAsync 方法中增加错误类名 identifier = parsePrefix(identifier); @@ -215,7 +219,7 @@ export class BaseApplicationContext const definition = this.registry.getDefinition(identifier); if (!definition && this.parent) { - return this.parent.getAsync(identifier, args); + return this.parent.getAsync(identifier, args); } if (!definition) { diff --git a/packages/core/src/interface.ts b/packages/core/src/interface.ts index 51bd0126e46c..00463d672a28 100644 --- a/packages/core/src/interface.ts +++ b/packages/core/src/interface.ts @@ -34,7 +34,9 @@ export interface IMessageSource { export interface IObjectFactory { registry: IObjectDefinitionRegistry; isAsync(identifier: ObjectIdentifier): boolean; + get(identifier: new () => T, args?: any): T; get(identifier: ObjectIdentifier, args?: any): T; + getAsync(identifier: new () => T, args?: any): Promise; getAsync(identifier: ObjectIdentifier, args?: any): Promise; } /** diff --git a/packages/core/test/fixtures/fun_sample.ts b/packages/core/test/fixtures/fun_sample.ts index 0e8c70d6970f..ceee58913f59 100644 --- a/packages/core/test/fixtures/fun_sample.ts +++ b/packages/core/test/fixtures/fun_sample.ts @@ -45,13 +45,13 @@ export class AliSingleton { } export async function singletonFactory(context: IApplicationContext) { - const inst = await context.getAsync('aliSingleton'); - return (inst as AliSingleton).getInstance(); + const inst = await context.getAsync(AliSingleton); + return inst.getInstance(); } export async function singletonFactory2(context: IApplicationContext) { return async () => { - const inst = await context.getAsync('aliSingleton'); - return (inst as AliSingleton).getInstance(); + const inst = await context.getAsync('aliSingleton'); + return inst.getInstance(); }; } diff --git a/packages/midway/src/index.ts b/packages/midway/src/index.ts index 38f1fe0d4c56..d003575794bf 100644 --- a/packages/midway/src/index.ts +++ b/packages/midway/src/index.ts @@ -13,7 +13,6 @@ export const VERSION = require('../package.json').version; */ export const RELEASE = 'WANDA'; - /** * @deprecated Please use IWebMiddleware instead */