Я использую InversifyJS с TypeScript.Завод с параметрами в InversifyJS
Скажем, у меня есть класс, который имеет смесь вводили и не-инжектированных параметров конструктора:
@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?
Благодарим за это. Это определенно улучшает необходимость «get()» каждой зависимости класса. Тем не менее, я могу предложить другой подход к GitHub. –