Closed
Description
Hey, I have the problem that I can't get the injects working. It always says Missing required @inject or @multiInject annotation
. Event though I add this annotation it still complains (I don't have a circular dependency either).
Expected Behavior
Injection should work.
Current Behavior
I'm trying to get inversify working together with the latest create-react-app. Unfortunately no inject is working like expected. I took a really small example to reproduce this issue:
Steps to Reproduce (for bugs)
create-react-app test --typescript
cd test
yarn add inversify reflect-metadata
- update tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"allowJs": true,
"skipLibCheck": false,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"lib": ["es6", "dom"],
"types": ["reflect-metadata", "node"],
"experimentalDecorators": true,
"emitDecoratorMetadata": true
},
"include": [
"src"
]
}
- replace whole content of src/index.tsx:
import {Container, injectable, inject} from 'inversify';
import 'reflect-metadata';
let container: Container = new Container();
const KatanaType: symbol = Symbol();
const ShurikenType: symbol = Symbol();
const NinjaType: symbol = Symbol();
@injectable()
class Katana {
public hit() {
return 'cut!';
}
}
@injectable()
class Shuriken {
public throw() {
return 'hit!';
}
}
@injectable()
class Ninja {
public constructor(
@inject(KatanaType) private katana: Katana,
@inject(ShurikenType) private shuriken: Shuriken,
) {
}
public fight() {
return this.katana.hit();
}
public sneak() {
return this.shuriken.throw();
}
}
container.bind<Katana>(KatanaType).to(Katana).inSingletonScope();
container.bind<Shuriken>(ShurikenType).to(Shuriken).inSingletonScope();
container.bind<Ninja>(NinjaType).to(Ninja).inSingletonScope();
container.get(NinjaType);
- run
yarn start
- See error "Error: Missing required @Inject or @multiInject annotation in: argument 0 in class Ninja.
".
Environment
Node version: v10.11.0
create-react-app version: 2.1.1
package.json:
{
"name": "test",
"version": "0.1.0",
"private": true,
"dependencies": {
"@types/jest": "23.3.9",
"@types/node": "10.12.10",
"@types/react": "16.7.7",
"@types/react-dom": "16.0.10",
"inversify": "^5.0.1",
"react": "^16.6.3",
"react-dom": "^16.6.3",
"react-scripts": "2.1.1",
"reflect-metadata": "^0.1.12",
"typescript": "3.1.6"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
}
I'm not sure if I have a wrong configuration somewhere or if this is a problem in create-react-app. I appreciate your help :)
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
Done