【问题标题】:How to Inject my service to ExceptionHandler如何将我的服务注入到 ExceptionHandler
【发布时间】:2016-10-03 05:53:25
【问题描述】:

我在 angular 2 自动注入的其他地方使用了我的服务。 我想在 ExceptionHandler 中使用相同的服务。 但是服务不会将数据发布到服务器。 我通过调试器和我的服务调用。

class MyExceptionHandler extends ExceptionHandler {
  rbJSLogger: RBLoggerService;

  constructor() {
    super(null,null);
    var injector = ReflectiveInjector.resolveAndCreate([
      RBLoggerService,
      JSONP_PROVIDERS,
      Http,
      ConnectionBackend,
      HTTP_PROVIDERS
    ]);
    this.rbJSLogger = injector.get(RBLoggerService);
  }
  call(error, stackTrace = null, reason = null){
    // console.error(stackTrace);
    this.rbJSLogger.searchBy("asd");
  }
}

【问题讨论】:

    标签: angular


    【解决方案1】:

    更新 ExceptionHandler 更名为ErrorHandler https://stackoverflow.com/a/35239028/217408

    原创

    这段代码

    var injector = ReflectiveInjector.resolveAndCreate([...]);
    

    创建一个新的独立注入器,它对 Angular 应用程序中提供的服务一无所知。

    您可能希望在您的应用程序中注入 Angular 使用的注入器,例如

    class MyExceptionHandler extends ExceptionHandler {
      rbJSLogger: RBLoggerService;
    
      constructor(injector:Injector) {
        super(null,null);
        this.rbJSLogger = injector.get(RBLoggerService);
      }
      call(error, stackTrace = null, reason = null){
        // console.error(stackTrace);
        this.rbJSLogger.searchBy("asd");
      }
    }
    

    或者只是

    class MyExceptionHandler extends ExceptionHandler {
      rbJSLogger: RBLoggerService;
    
      constructor(private rbJSLogger:RBLoggerService) {
        super(null,null);
      }
      call(error, stackTrace = null, reason = null){
        // console.error(stackTrace);
        this.rbJSLogger.searchBy("asd");
      }
    }
    

    【讨论】:

    • 谢谢,我使用了第二种变体。
    • 如果没有特殊要求,那么第二个变体绝对是要走的路,但我不确定你的问题。
    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多