Я пытаюсь, чтобы шаблоны автоматически подключались к контейнеру inversifyjs, но что бы я ни пытался, это не работает.Пожалуйста, помогите?
private templates = [
{file: './component.html.tpl', obj: 'HtmlTemplate'},
{file: './component.tpl.ts', obj: 'ComponentTemplate'}
];
private container = new Container();
bind(){
// original and working code
// this.container.bind<ITemplate>('HtmlTemplate').to(HtmlTemplate);
// this.container.bind<ITemplate>('ComponentTemplate').to(ComponentTemplate);
this.templates.forEach(template => {
import(template.file).then(mod => {
console.log(mod.default, template);
// is this correct (seems to work) =>
this.container.bind<ITemplate>(template.obj).to(mod.default);
console.log('bound =>', mod.default);
});
});
}
и файлам ./component.html.tpl
@injectable() export default class HtmlTemplate implements ITemplate { ... }
и ./component.ts.tpl
@injectable() export default class ComponentTemplate implements ITemplate { ... }
Что регистрирует полностьюкак и ожидалось консоли:
[Function: HtmlTemplate] { file: './component.html.tpl', obj: 'HtmlTemplate' }
[Function: ComponentTemplate] { file: './component.tpl.ts', obj: 'ComponentTemplate' }
Но я действительно ожидал, что код в выражении foreach:
this.container.bind<ITemplate>(template.obj).to(mod.default);
будет эквивалентен этому:
this.container.bind<HtmlTemplate>('HtmlTemplate').to(HtmlTemplate);
this.container.bind<ComponentTemplate>('ComponentTemplate').to(ComponentTemplate);
но когда я пытаюсь разрешить его в другом цикле:
this.templates.forEach(template => {
const tpl = this.container.get<ITemplate>(template.obj);
...
выдает ошибку:
Error: No matching bindings found for serviceIdentifier HtmlTemplate
Кто-нибудь знает, как решить эту проблему?