我将InversifyJS与 TypeScript 一起使用。
假设我有一个混合了注入和非注入构造函数参数的类:
@injectable()
export class MyClass {
constructor(
foo: Foo, // This thing isn't injectable
@inject(Bar) bar: Bar // This thing is
){
...
}
}
我想将这个类的工厂注入到其他类中,然后用第一个参数的值调用它。
@injectable()
export class SomeOtherClass {
constructor(
@inject("Factory<MyClass>") myClassFactory: (foo: Foo) => MyClass
){
const someFoo = new Foo();
const myClass = myClassFactory(someFoo);
}
}
我的问题:Inversify 中是否有一些自动魔法可以让我注入这个工厂?
到目前为止,我想出的最好的是:
bind<interfaces.Factory<MyClass>>("Factory<MyClass>").toFactory(context =>
(foo: Foo) =>
new MyClass(foo, context.kernel.get<Bar>(Bar))
);
但这意味着我是明确new()
的MyClass
,并且每个新的可注入依赖项MyClass
也必须在这里添加。
有没有更好的办法?也许基于参数名称的东西,比如Ninject Factory Extensions?