angular - 使用注入(inject)器根据类名获取服务

标签 angular

在 Angular 2 中,我希望有一个可以扩展到特定服务的父服务。 组件的属性会说明要使用哪个服务。 问题是我不知道该怎么做,因为 injector.get() 需要类作为参数 - 而不是类名。这是代码示例。

import {Injectable, Injector, Provider} from '@angular/core';

@Injectable()
export class ObjectFactoryService {

    constructor(private injector: Injector) {
    }

    getObjectService(tableId: string): Provider {
        //return this.injector.get(SpecificService); - works but this is class not classname
        return this.injector.get(this.createObjectServiceName(tableId)); //error - provider not exists
    }

    private createObjectServiceName(tableId: string): string {
        return tableId.charAt(0).toUpperCase() + tableId.slice(1) + "Service";
    }
}

最佳答案

如果您为类提供字符串标记,则可以使用字符串标记获取它们

providers: [MyClass, {provide: 'MyClass', useExisting: MyClass}]
myClass = this.injector.get('MyClass');

关于angular - 使用注入(inject)器根据类名获取服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40376063/

相关文章:

Angular 2模板作为组件的参数

node.js - 如何迭代对象数组或将对象列表转换为数组?

angular - 测试我的组件时,fixture.whenStable() 永远不会解析

angular - 如何从此 PrimeNG FullCalendar 动态删除事件(单击事件)?

angular - 带有 'lazy rendering' 的可扩展行表 - Angular Material

angular - 找不到本地 "typescript"包。 "@ngtools/webpack"包 Angular 2

angular - 如何让 Angular 2 获取动态添加的 routerLink 指令

angular - 如何执行顺序服务调用?

Angular 6 项目未在 IE11 中加载

angular - 打印 Angular 8 中的键值