使用注入器获取基于classname的服务

时间:2016-11-02 09:08:34

标签: 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";
    }
}

1 个答案:

答案 0 :(得分:4)

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

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