Angular nativescript不工作的代码共享项目中的包装器服务

Angular nativescript不工作的代码共享项目中的包装器服务,angular,dependency-injection,nativescript,Angular,Dependency Injection,Nativescript,我试图为我的服务notificationservice创建一个包装器,这样我就可以使用具有相同导入的“移动版本”。但它似乎不起作用 这是我的代码: 我的应用程序模块.tns.ts @NgModule({ declarations: [ AppComponent, AutoGeneratedComponent, LoginComponent, HideActionBarDirective ], imports: [NativeScriptModule,

我试图为我的服务
notificationservice
创建一个包装器,这样我就可以使用具有相同导入的“移动版本”。但它似乎不起作用

这是我的代码:

我的应用程序模块.tns.ts

@NgModule({
  declarations: [
    AppComponent,
    AutoGeneratedComponent,
    LoginComponent,
    HideActionBarDirective
  ],
  imports: [NativeScriptModule, AppRoutingModule],
  providers: [
    {
      provide: CustomStorageServiceService,
      useValue: MovilStorageServiceService
    },
    {
      provide: NotificacionesService,
      useValue: NotificacionesMovilService
    }
  ],
  bootstrap: [AppComponent],
  schemas: [NO_ERRORS_SCHEMA]
})
@Injectable({
  providedIn: "root"
})
export class NotificacionesMovilService {
  constructor() {
    console.log('NotificacionesMovilService')
  }

  alerta(title, message, okButtonText = "ok") {

    dialogs.alert({ title, message, okButtonText }).then(respuesta => {
      console.log("termino");
    });
  }

  error(title, message, okButtonText = "ok", cb = () => {}) {
    console.log('Estamos en error')
    dialogs.alert({ title, message, okButtonText }).then(respuesta => {
      cb();
    });
  }
}
import swal from "sweetalert2";

@Injectable({
  providedIn: "root"
})
export class NotificacionesService {
  constructor() {}

  alerta(title, message, okButtonText = "ok") {

    swal.fire(title, message, 'warning')

  }

  error(title, message, okButtonText = "ok", cb = () => {}) {
    swal.fire(title, message, 'error').then( (Parametros)=>{
      cb()
    } )
  }
}
通知移动服务.ts

@NgModule({
  declarations: [
    AppComponent,
    AutoGeneratedComponent,
    LoginComponent,
    HideActionBarDirective
  ],
  imports: [NativeScriptModule, AppRoutingModule],
  providers: [
    {
      provide: CustomStorageServiceService,
      useValue: MovilStorageServiceService
    },
    {
      provide: NotificacionesService,
      useValue: NotificacionesMovilService
    }
  ],
  bootstrap: [AppComponent],
  schemas: [NO_ERRORS_SCHEMA]
})
@Injectable({
  providedIn: "root"
})
export class NotificacionesMovilService {
  constructor() {
    console.log('NotificacionesMovilService')
  }

  alerta(title, message, okButtonText = "ok") {

    dialogs.alert({ title, message, okButtonText }).then(respuesta => {
      console.log("termino");
    });
  }

  error(title, message, okButtonText = "ok", cb = () => {}) {
    console.log('Estamos en error')
    dialogs.alert({ title, message, okButtonText }).then(respuesta => {
      cb();
    });
  }
}
import swal from "sweetalert2";

@Injectable({
  providedIn: "root"
})
export class NotificacionesService {
  constructor() {}

  alerta(title, message, okButtonText = "ok") {

    swal.fire(title, message, 'warning')

  }

  error(title, message, okButtonText = "ok", cb = () => {}) {
    swal.fire(title, message, 'error').then( (Parametros)=>{
      cb()
    } )
  }
}
notifications.services.ts

@NgModule({
  declarations: [
    AppComponent,
    AutoGeneratedComponent,
    LoginComponent,
    HideActionBarDirective
  ],
  imports: [NativeScriptModule, AppRoutingModule],
  providers: [
    {
      provide: CustomStorageServiceService,
      useValue: MovilStorageServiceService
    },
    {
      provide: NotificacionesService,
      useValue: NotificacionesMovilService
    }
  ],
  bootstrap: [AppComponent],
  schemas: [NO_ERRORS_SCHEMA]
})
@Injectable({
  providedIn: "root"
})
export class NotificacionesMovilService {
  constructor() {
    console.log('NotificacionesMovilService')
  }

  alerta(title, message, okButtonText = "ok") {

    dialogs.alert({ title, message, okButtonText }).then(respuesta => {
      console.log("termino");
    });
  }

  error(title, message, okButtonText = "ok", cb = () => {}) {
    console.log('Estamos en error')
    dialogs.alert({ title, message, okButtonText }).then(respuesta => {
      cb();
    });
  }
}
import swal from "sweetalert2";

@Injectable({
  providedIn: "root"
})
export class NotificacionesService {
  constructor() {}

  alerta(title, message, okButtonText = "ok") {

    swal.fire(title, message, 'warning')

  }

  error(title, message, okButtonText = "ok", cb = () => {}) {
    swal.fire(title, message, 'error').then( (Parametros)=>{
      cb()
    } )
  }
}
当我调用此服务时,出现下一个错误:

错误类型错误:此.\u NotificationsService.ERROR不是函数

但如果我颠倒这个顺序:

{
      provide: NotificacionesMovilService,
      useValue: NotificacionesService  
    }


我做错了什么?

因为我没有注入现有的服务,所以我需要为
useClass
更改属性
useValue

别名类提供程序 假设一个旧组件依赖于
OldLogger
class
OldLogger
NewLogger
具有相同的界面,但是 由于某些原因,您无法更新旧组件以使用它

当旧组件使用
oldloge
r记录消息时,您需要 改为使用
NewLogger
的单例实例来处理它。在这种情况下,, 依赖项注入器应该在 组件请求新的或旧的记录器。
OldLogger
应该 是
新记录器的别名

如果您尝试使用
useClass
OldLogger
别名为
NewLogger
,则会导致 在应用程序中使用两个不同的
NewLogger
实例

[ NewLogger,   
    // Not aliased! Creates two instances of `NewLogger`   
    { provide: OldLogger, useClass: NewLogger}] 
确定 只有一个带有
使用现有的
选项

[ NewLogger,   
   // Alias OldLogger w/ reference to NewLogger   
{ provide: OldLogger, useExisting: NewLogger}]

{provide:NotificacionesService,useValue:NotificacionesMovilService}
提供一般服务使用私有实现。