Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Moving from Symbol.for() to Symbol() doesn't resolve dependencies correctly #1559

Open
Rmonik opened this issue Feb 22, 2024 · 1 comment
Open

Comments

@Rmonik
Copy link

Rmonik commented Feb 22, 2024

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)

  1. Create a constant: const a = Symbol("a");
  2. Bind something to it: container.bind(a).to(MyClass);
  3. Get it from the container: container.getAsync(a);
  4. 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

@saifeiLee
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants