ViewContainerRef.createComponent
createComponent(componentFactory: ComponentFactory<C>, index?: number, injector?: Injector, projectableNodes?: any[][]) : ComponentRef<C>
has an injector
范围。如果您通过了一项,则该一项将用于解析提供者。我认为您不能覆盖添加到的提供者@Component()
不过装饰器。
您可以创建一个新的注入器Injector
let injector = ReflectiveInjector.resolveAndCreate([Car, Engine])
并传递此注入器,或者您可以将注入器注入到调用的组件中ViewContainerRef.createComponent
并创建一个子注入器。
constructor(private injector:Injector) {}
Injector
是通用基类ReflectiveInjector
是一个具体的实现。
let resolvedProviders = ReflectiveInjector.resolve([Car, Engine]);
let child = ReflectiveInjector.fromResolvedProviders(resolvedProviders, this.injector);
这样,当前组件可用的提供程序就会被传递并Car
, and Child
被添加。因此提供者认为child
无法解决(除了Car
and Engine
)尝试从父注入器解析。
笨蛋的例子