首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用包装器的类泛型获取泛型服务?

如何使用包装器的类泛型获取泛型服务?
EN

Stack Overflow用户
提问于 2017-12-09 05:41:41
回答 1查看 1.3K关注 0票数 1

我使用的是angular 5,并且我试图减少注入到我的类中的参数数量。我不想讨论服务定位器是否是反模式的,请理解angular/typescript是否允许我这样做。

我经常使用服务定位器,但有一种情况我不知道如何解决,而且我读到的关于泛型注入的几个问题也没有太大帮助:/

这是我的案例:

代码语言:javascript
复制
export abstract class BaseComponent<T extends BaseModel> {
    protected recordId?: number = undefined;
    protected alertService: AlertService;
    protected translateService: TranslateService;
    protected router: Router;

    protected constructor(
        protected activatedRoute: ActivatedRoute,
        protected store: BaseCrudStore<T>,
        protected baseType: { new(): T; }
    ) {
        this.record = new baseType();
        this.alertService = ServiceLocator.injector.get(AlertService);
        this.translateService = ServiceLocator.injector.get(TranslateService);
        this.router = ServiceLocator.injector.get(Router);
        //...
   }
}

我希望BaseCrudStore也可以使用服务定位器来解析,而不是通过构造函数注入它。有没有办法做到这一点?有没有办法使用服务定位器找到我的商店?正如您所看到的,BaseCrudStore也是泛型的,并且泛型参数与BaseComponent类相同。

到目前为止,我还不能修复注入ActivatedRoute。它确实注入了,但(很可能)由于angular的结构,它并不代表当前的路由,这在思考它是如何构建的时候是有意义的。如果您还知道如何修复此问题:)

我很感谢你在这方面的帮助...我的代码100%正常工作,只是这几个月来一直困扰着我,我无法修复它。

ServiceLocator初始化:

代码语言:javascript
复制
export class AppModule {
    constructor(private injector: Injector) {
        ServiceLocator.injector = this.injector;
    }
}

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-22 23:59:58

如果您的环境中已经有了一个注入器,您可以尝试如下所示:

代码语言:javascript
复制
protected store: Store<T>;

protected constructor() {
    this.store = AppInjectorService.injector.get<Store<T>>(Store);
}

在Angular 6上进行了测试。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47722578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档