From 7897f451962a2b30b03dfd99fe851d9577a748c4 Mon Sep 17 00:00:00 2001 From: "Remo H. Jansen" Date: Sat, 16 Dec 2017 00:03:15 +0000 Subject: [PATCH] Issue 706 (#718) * Fixes 706 * Test coverage back to 100% * Preparing release * Preparing release --- package.json | 4 ++-- src/inversify.ts | 1 + src/resolution/resolver.ts | 6 +++--- test/bugs/issue_543.test.ts | 2 +- test/bugs/issue_549.test.ts | 2 +- test/bugs/issue_706.test.ts | 33 +++++++++++++++++++++++++++++++++ 6 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 test/bugs/issue_706.test.ts diff --git a/package.json b/package.json index dc6c7e69..d3394333 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "inversify", - "version": "4.6.1", + "version": "4.7.0", "description": "A powerful and lightweight inversion of control container for JavaScript and Node.js apps powered by TypeScript.", "main": "lib/inversify.js", "jsnext:main": "es/inversify.js", - "typings": "./dts/inversify.d.ts", + "types": "./dts/inversify.d.ts", "directories": { "test": "gulp" }, diff --git a/src/inversify.ts b/src/inversify.ts index 07a3561f..5c9124bd 100644 --- a/src/inversify.ts +++ b/src/inversify.ts @@ -1,6 +1,7 @@ import * as keys from "./constants/metadata_keys"; export const METADATA_KEY = keys; export { Container } from "./container/container"; +export { BindingScopeEnum, BindingTypeEnum, TargetTypeEnum } from "./constants/literal_types"; export { ContainerModule } from "./container/container_module"; export { injectable } from "./annotation/injectable"; export { tagged } from "./annotation/tagged"; diff --git a/src/resolution/resolver.ts b/src/resolution/resolver.ts index 90527f0d..e9fdbed1 100644 --- a/src/resolution/resolver.ts +++ b/src/resolution/resolver.ts @@ -80,19 +80,19 @@ const _resolveRequest = (requestScope: interfaces.RequestScope) => result = invokeFactory( "toDynamicValue", binding.serviceIdentifier, - () => binding.dynamicValue ? binding.dynamicValue(request.parentContext) : undefined + () => (binding.dynamicValue as (context: interfaces.Context) => any)(request.parentContext) ); } else if (binding.type === BindingTypeEnum.Factory && binding.factory !== null) { result = invokeFactory( "toFactory", binding.serviceIdentifier, - () => binding.factory ? binding.factory(request.parentContext) : undefined + () => (binding.factory as interfaces.FactoryCreator)(request.parentContext) ); } else if (binding.type === BindingTypeEnum.Provider && binding.provider !== null) { result = invokeFactory( "toProvider", binding.serviceIdentifier, - () => binding.provider ? binding.provider(request.parentContext) : undefined + () => (binding.provider as interfaces.Provider)(request.parentContext) ); } else if (binding.type === BindingTypeEnum.Instance && binding.implementationType !== null) { result = resolveInstance( diff --git a/test/bugs/issue_543.test.ts b/test/bugs/issue_543.test.ts index 2f501ba1..311b5d39 100644 --- a/test/bugs/issue_543.test.ts +++ b/test/bugs/issue_543.test.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import * as ERROR_MSGS from "../../src/constants/error_msgs"; import { Container, inject, injectable } from "../../src/inversify"; -describe("issue 543", () => { +describe("Issue 543", () => { it("Should throw correct circular dependency path", () => { diff --git a/test/bugs/issue_549.test.ts b/test/bugs/issue_549.test.ts index f6bc5dfe..5a7a74f6 100644 --- a/test/bugs/issue_549.test.ts +++ b/test/bugs/issue_549.test.ts @@ -1,7 +1,7 @@ import * as ERROR_MSGS from "../../src/constants/error_msgs"; import { Container, inject, injectable } from "../../src/inversify"; -describe("issue 549", () => { +describe("Issue 549", () => { it("Should throw if circular dependencies found with dynamics", () => { diff --git a/test/bugs/issue_706.test.ts b/test/bugs/issue_706.test.ts new file mode 100644 index 00000000..94c43e48 --- /dev/null +++ b/test/bugs/issue_706.test.ts @@ -0,0 +1,33 @@ +import { expect } from "chai"; +import { BindingScopeEnum, Container, injectable } from "../../src/inversify"; + +describe("Issue 706", () => { + + it("Should expose BindingScopeEnum as part of the public API", () => { + + @injectable() + class SomeClass { + public time: number; + public constructor() { + this.time = new Date().getTime(); + } + } + + const container = new Container({ + defaultScope: BindingScopeEnum.Singleton, + }); + + const TYPE = { + SomeClass: Symbol.for("SomeClass") + }; + + container.bind(TYPE.SomeClass).to(SomeClass); + + const instanceOne = container.get(TYPE.SomeClass); + const instanceTwo = container.get(TYPE.SomeClass); + + expect(instanceOne.time).to.eq(instanceTwo.time); + + }); + +});