如何在节点中使用带有Typescript泛型的IOC容器?

时间:2018-12-06 18:04:22

标签: node.js typescript generics inversion-of-control

我正在尝试使用container-ioc,但很高兴使用任何提供IoC的软件包。我找不到使用打字稿泛型的任何示例。基本上,我想要:

interface A<T> {
    foo();
}

class A<T> {
    foo() {
    }
}

interface B<T> {
    bar: A<T>;
}

class B<T> {
    bar: A<T>;
    constructor(param: A<T>) {
       this.bar = param;
    }
}

我可以在其中设置IoC容器以将A注入B。我在节点应用程序中使用Typescript。我的语法似乎至少可以解析,但是由于我不知道如何传递通用参数,因此无法制作容器resolve()。更不用说,我不确定是否真的支持此功能。

1 个答案:

答案 0 :(得分:0)

因此,我有一个适合我情况的解决方法。首先,我使用const MyFoo = Symbol("Foo<My>")为通用类型设置符号。然后,在注册类型时使用工厂构造函数:

container.register([    
    { token: MyBar, useFactory: () => new Bar<My>() },
      token: MyFoo, useFactory: () => new Foo<My>( container.resolve(MyBar) )}]);

最后,我不@inject在构造函数上的参数。这种方法意味着我需要事先知道将要使用的泛型类型。就我而言,我这样做:我的泛型类型实现了实体存储库和相关类,而我的实体是泛型参数。在建立新实体时,我宁愿没有另一个地方可以维护,因此,如果有人有更好的解决方案,我将不接受此答案。