我显然误解了 TSyringe 应该如何解决具有依赖关系的类。
我创建了一个最小的复制。在我的 index.tsx 中,我按照文档和 import 中的指示进行操作reflect-metadata
。如果我注入一个singleton
没有依赖项的类,则此示例有效:
// index.tsx
import "reflect-metadata";
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
一个单例类:
// _A.ts
import {inject, singleton} from 'tsyringe';
@singleton()
export class A {
get_msg() {
return "Worked!";
}
}
以及使用它的组件:
// App.tsx
import React from 'react';
import './App.css';
import {container} from "tsyringe";
import {A} from "./_A";
interface Props {
a?: A
}
function App({a = container.resolve(A)}: Props) {
return (
<div className="App">
{a.get_msg()}
</div>
);
}
export default App;
当我运行应用程序时,Worked!文本按预期打印。
但是,如果我创建第二个名为 B 的单例:
// _B.ts
import {singleton} from 'tsyringe';
@singleton()
export class B {
get_msg() {
return "Worked!";
}
}
然后注入B
以A
获取消息:
// _A.ts
import {inject, singleton} from 'tsyringe';
import {B} from "./_B";
@singleton()
export class _A {
constructor(private b: B) {
}
get_msg() {
return this.b.get_msg();
}
}
然后它失败了Uncaught Error: TypeInfo not known for "A"
我有:
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
在我的tsconfig.ts
,正如他们在自述文件中指出的那样。
注射器不应该自动解析 B,将 B 注入 A,然后将 A 注入我的应用程序组件,以便我可以打印消息吗?
我错过了什么?