Angular2 DI:注入全局扩展服务(不能解析所有参数)

Angular2 DI:注入全局扩展服务(不能解析所有参数),angular,firebase,ionic2,angularfire2,Angular,Firebase,Ionic2,Angularfire2,我刚刚使用AngularFire2将我的Ionic应用程序代码库升级到ng2版本。在代码库中,我有一个名为FirebaseService的全局服务,它扩展了AngularFire @Injectable() export class FirebaseService extends AngularFire { constructor(firebaseConfig: string, auth: AngularFireAuth, database: FirebaseDatabase) {

我刚刚使用AngularFire2将我的Ionic应用程序代码库升级到ng2版本。在代码库中,我有一个名为FirebaseService的全局服务,它扩展了AngularFire

@Injectable()
export class FirebaseService extends AngularFire {

  constructor(firebaseConfig: string, auth: AngularFireAuth, database: FirebaseDatabase) {
      super(firebaseConfig, auth, database);
  }

...

}
在我的
app.component.ts
中,我将FirebaseService包含在
providers
数组中(我尝试了
FirebaseService
{provide:AngularFire,useClass:FirebaseService}
)。但是,当我运行应用程序时,会出现以下错误:

Uncaught Error: Can't resolve all parameters for DiscoverPage: (NavController, GlobalService, ?, Events).
DiscoverPage
的构造函数如下:

@Component({
  selector: 'catalogue-discover',
  templateUrl: 'catalogue-discover.html'
})

export class DiscoverPage {
  constructor(private nav: NavController, 
              private global: GlobalService,
              public firebase: FirebaseService, 
              private events: Events) {
  }

...

}

“?”指向FirebaseService——我感觉我没有正确执行DI。关于如何继续的任何建议?

您应该将
@Injectable()
装饰器添加到您的服务中。

您应该将
@Injectable()
装饰器添加到您的服务中。

可能存在两个问题:

  • 正如@shinglesmingles所提到的,您应该在服务类声明中添加decorator
    Injectable

  • 避免循环引用,尽管它们通常是有效的,但在某些情况下它们不起作用

  • [2]的示例:

    // file a.ts
    export ClassA {}
    
    // file b.ts
    import { ClassA } from './';
    
    export ClassB { 
      // using ClassA somehow
    }
    
    // file index.ts
    export * from './a';
    export * from './b';
    

    可能存在两个问题:

  • 正如@shinglesmingles所提到的,您应该在服务类声明中添加decorator
    Injectable

  • 避免循环引用,尽管它们通常是有效的,但在某些情况下它们不起作用

  • [2]的示例:

    // file a.ts
    export ClassA {}
    
    // file b.ts
    import { ClassA } from './';
    
    export ClassB { 
      // using ClassA somehow
    }
    
    // file index.ts
    export * from './a';
    export * from './b';
    

    请发布
    DiscoverPage的代码(类声明和构造函数)
    请发布
    DiscoverPage的代码(类声明和构造函数)
    对不起,忘了把它放在代码段中<代码>@Injectable()肯定在那里,因为它在我升级到Angular2版本之前就已经工作了。哦,好吧,解决方案并没有那么简单;)对不起,忘了把它放在代码段中<代码>@Injectable()肯定在那里,因为它在我升级到Angular2版本之前就已经工作了。哦,好吧,解决方案并没有那么简单;)