Wie verwende ich ResolveComponentFactory (), aber mit einem String als Schlüssel?

was ich versuche zu tun:

Verwenden Sie etwas Ähnliches wie "resolveComponentFactory ()", aber mit einem "String" -Kennzeichen, um Component Factories abzurufen.Starten Sie die Methode "createComponent (Factory)", sobald Sie sie erhalten haben.

Plnkr Beispiel -> Linkbeschreibung hier eingeben

Im Beispiel sehen Sie die Methode "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);

}

Der "compFactoryResolver: ComponentFactoryResolver" wird in den Konstruktor eingefügt.

ie Sie feststellen werden, ist es nicht ideal, jede Permutation in einer switch-Anweisung fest zu codiere

wenn der ComponentFactoryResolver in der Konsole protokolliert wird, habe ich festgestellt, dass er eine Map mit den verschiedenen Fabriken enthält.

CodegenComponentFactoryResolver {_parent: AppModuleInjector, _factories: Map}

Diese Karte ist jedoch privat und nicht leicht zugänglich (soweit ich das beurteilen kann).

Gibt es eine bessere Lösung, als irgendwie meine eigene Klasse zu rollen, um Zugang zu dieser Fabrikliste zu bekommen?

Ich habe viele Nachrichten über Leute gesehen, die versuchen, dynamische Komponenten zu erstellen. Hierbei handelt es sich jedoch häufig um das Erstellen von Komponenten zur Laufzeit. Die Komponenten, um die es hier geht, sind bereits vordefiniert. Ich versuche nicht, mithilfe eines Strings als Schlüssel auf Fabriken zuzugreifen.

Alle Vorschläge oder Ratschläge werden sehr geschätzt.

Dankesehr

Antworten auf die Frage(2)

Ihre Antwort auf die Frage