inversify / InversifyJS

A powerful and lightweight inversion of control container for JavaScript & Node.js apps powered by TypeScript.
http://inversify.io/
MIT License
11.02k stars 712 forks source link

Injecting an object with a .then property which is not a promise resolves to undefined #1570

Open brahms116 opened 2 months ago

brahms116 commented 2 months ago

When you inject an object with a property of .then but its not a promise, it resolves to undefined. This is because when resolving it believes that its a promise when its not

Expected Behavior

This should pass...

import { expect } from "chai";
import { Container, inject, injectable } from "../../src/inversify";

describe("Issue", () => {
  it("It should not return injected value as undefined if the value contains a .then property but it is not a promise", () => {
    const container = new Container();

    interface Injected {
      myProperty: string;
      then: () => number;
    }

    @injectable()
    class ResolveMe {
      constructor(@inject("Injected") public injected: Injected) {}
    }

    container.bind("Injected").toConstantValue({
      myProperty: "myNewProperty",
      then: () => 1
    });

    const me = container.resolve(ResolveMe);
    expect(me.injected.myProperty).to.eql("myNewProperty");
  });
});

Current Behavior

injected resolves to undefined

Possible Solution

I have linked a PR for a possible approach https://github.com/inversify/InversifyJS/pull/1571