使用来自共享 Angular 2 库的提供程序导致异常:必须定义令牌

Using a provider from a shared Angular 2 library causes exception: token must be defined

我正在为 Angular 2 个项目创建一个共享库。 我可以将 classes 和 UI 组件添加到库中并在另一个项目中使用它们而不会出现问题。 但是,当我创建服务提供者时,我不确定如何注入例如 http 依赖项。

我制作了一个演示共享库 here 来提供我正在做的事情的示例。 这个 lib linked(通过 npm link)到 another project(一个 Ionic 2 启动项目)。

我在 Socius 共享库中创建了一个示例 class 来对 Wikidata 进行 http 调用。 我将从常规项目中使用的提供程序 class 的普通构造函数如下所示:

@Injectable()
export class Wikidata {
     constructor(public http: Http)

以这种方式使用它会产生运行时错误: 无法解析 TutorialPage 的所有参数:(NavController、MenuController、TranslateService、?)。

我还看到了一些使用这种语法的例子:

constructor(@Inject(Http) public http: Http) {

这将产生相同的运行时错误。

根据对 的回答,我尝试了这个:

private wikidata: Wikidata;
    constructor(injector:Injector) {
          setTimeout(() => this.wikidata = injector.get(Wikidata));
    }

使用此方法会导致新错误:

EXCEPTION: Token must be defined!

使用具有此类依赖关系的 class 的正确方法是什么?

不确定如何正确回答这个问题:) 我所知道的是,服务不需要在模块中导入导出。只需将它们添加到库模块的提供程序并将其作为整个模块导入到 'imports' 语句中。之后,无论何时你需要注入它,你仍然需要直接找到这个可注入维基数据的来源,将它导入文件中,这应该可以工作。