在ionic中使用提供者和注入令牌创建重复实例

时间:2018-01-28 20:06:10

标签: angular ionic-framework dependency-injection ionic3 abstract-factory

我有一个服务接口和一个注入令牌:

User.update(
  { _id: req.user._id, 'addresses._id': addressId },
  { $set: {
    'addresses.$.alias': newAddress.alias,
    'addresses.$.address': newAddress.address,
    'addresses.$.areaId': newAddress.areaId,
    'addresses.$.cityId': newAddress.cityId,
    'addresses.$.postal_code': newAddress.postal_code
  } }
);

app.module.ts:

export const AUTH_PROVIDER_IT = new InjectionToken<AuthProvider>('auth')
export interface AuthProvider {
  login(IAuthLoginData): Promise<void>
  logout()
  register(IAuthRegistrationData): Promise<void>
}

我在登录页面中使用它:

@NgModule({
  ...
  providers: [
    ...
    {provide: AUTH_PROVIDER_IT, useClass: CognitoAuthProvider},
  ]
})

一切正常......

但是现在我有一个需要具体类的服务:

export class LoginPage implements OnInit {

  constructor(public navCtrl: NavController, ...
              @Inject(AUTH_PROVIDER_IT) public auth: AuthProvider) {
  }
...
}

所以我这样做:

@Injectable()
export class CognitoProfileProvider implements ProfileProvider {
  constructor(private cognitoAuth: CognitoAuthProvider) {

  }
}

但是当我尝试在我的@NgModule({ ... providers: [ ... CognitoAuthProvider, <--- HERE {provide: AUTH_PROVIDER_IT, useClass: CognitoAuthProvider}, {provide: PROFILE_PROVIDER_IT, useClass: CognitoProfileProvider} <-- AND HERE ] }) 中阅读CognitoAuthProvider时,我意识到这是一个新的实例......

为什么我为同一个提供商获取不同的实例?这是预期的行为吗?

  

注意:我测试过只注入具体的提供程序,它确实有效,但我想使用该接口。

也许我正在处理这个错误,我应该如何使用依赖注入建模并行继承层次结构?基本上是一个CognitoProfileProvider工厂模式,这可能吗?

我希望能够使用(CognitoAuthProvider,CognitoProfileProvider)或(SomeOtherAuthProvider,SomeOtherProfileProvider)代替我的界面。

1 个答案:

答案 0 :(得分:0)

同时使用令牌和类本身时,您必须使用finished index 0 (1/10). finished index 1 (2/10). finished index 2 (3/10). finished index 3 (4/10). finished index 4 (5/10). finished index 6 (6/10). finished index 8 (7/10). finished index 7 (8/10). finished index 9 (9/10). finished index 5 (10/10). 而非useExisting详细here

useClass