InversifyJS
InversifyJS copied to clipboard
Moving from Symbol.for() to Symbol() doesn't resolve dependencies correctly
Given that you use a global object which holds Symbol("Something") values and having bound a class to that identifier. If I try to get that identifier from the container, i get a "No bindings found" error. When changing the Symbol to a Symbol.for, this issue is not present.
Expected Behavior
Symbol() should work just as well as Symbol.for.
Current Behavior
Using a Symbol() doesn't correctly resolve dependencies.
Possible Solution
Steps to Reproduce (for bugs)
- Create a constant:
const a = Symbol("a");
- Bind something to it:
container.bind(a).to(MyClass);
- Get it from the container:
container.getAsync(a);
- Error: No matching bindings found for Symbol(a)
Context
I would like to use true Symbols (as opposed to Symbol.for, which i don't see the point in using) as we're facing naming collisions.
Your Environment
- Version used: 6.0.1
Stack trace
I cannot reproduce this issue. The test case i use:
import { expect } from "chai";
import { Container } from "../../src/inversify";
import { injectable } from "../../src/annotation/injectable";
@injectable()
class World {
hello() {
return "Hello World!";
}
}
describe("Symbol binding", () => {
it("Should support Symbol() as service identifier", () => {
const fooIdentifier = Symbol("FooInterface");
const container = new Container();
container.bind(fooIdentifier).to(World);
container.getAsync(fooIdentifier).then((foo: any) => {
foo.hello();
});
expect(container.get(fooIdentifier)).to.be.instanceof(World);
});
});
Version: 6.02