Как использовать ResolveComponentFactory (), но со строкой в ​​качестве ключа

что я пытаюсь сделать:

Используйте что-то похожее на "resolComponentFactory ()", но с идентификатором 'string', чтобы получить фабрики компонентов.Получив, начните использовать метод createComponent (Factory).

Пример Plnkr ->введите описание ссылки здесь

В примере вы увидите метод «AddItem»

addItem(componentName:string):void{
    let compFactory: ComponentFactory;
    switch(componentName){
        case "image":
            compFactory = this.compFactoryResolver.resolveComponentFactory(PictureBoxWidget);
            break;
        case "text":
            compFactory = this.compFactoryResolver.resolveComponentFactory(TextBoxWidget);
            break;
}

//How can I resolve a component based on string
//so I don't need to hard cost list of possible options


this.container.createComponent(compFactory);

}

«CompFactoryResolver: ComponentFactoryResolver» вводится в конструктор.

Как вы заметите, необходимость жесткого кодирования каждой перестановки в операторе switch не идеальна.

Когда я регистрировал ComponentFactoryResolver на консоли, я заметил, что он содержит Map с различными фабриками.

CodegenComponentFactoryResolver {_parent: AppModuleInjector, _factories: Map}

Тем не менее, эта карта является частной и не может быть легко доступна (из того, что я могу сказать).

Есть ли лучшее решение, чем как-то раскрутить мой собственный класс, чтобы получить доступ к этому списку фабрики?

Я видел много сообщений о людях, пытающихся создавать динамические компоненты. Однако часто речь идет о создании компонентов во время выполнения. рассматриваемые здесь компоненты уже предопределены, я застрял, пытаясь получить доступ к фабрикам, используя строку в качестве ключа.

Любые предложения или советы очень ценятся.

Спасибо, любезно.

Ответы на вопрос(1)

Ваш ответ на вопрос