0

我已经为 angular2 编写了一个远程记录器,它工作正常。我现在想将它作为自己的 npm 库发布并努力使其可用。我已经将自己定位于ngx-translate模块的设置。

我在内部使用的记录器的一般设置类似于Ben Nadel 的自定义错误处理程序帖子中描述的设置:

import {
  LOG4NG_SERVICE_HANDLER_PROVIDERS,
  LOG4NG_SERVICE_CONFIG,
  LOG4NG_ERROR_HANDLER_PROVIDERS,
  LOG4NG_ERROR_HANDLER_CONFIG } from './log4ng.service';
import * as message from './log4ng.service/message';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [
    LOG4NG_SERVICE_HANDLER_PROVIDERS,
    {
      provide: LOG4NG_SERVICE_CONFIG,
      useValue: {
        recipients: [
          {
            classname: 'ConsoleWriter',
            params: {
              name: 'Angular2 Test App::Console Logger'
            }
          }
        ],
        filters: [ /** filter definition **/ ]
      }
    },

    LOG4NG_ERROR_HANDLER_PROVIDERS,
    {
      provide: LOG4NG_ERROR_HANDLER_CONFIG,
      useValue: {
        rethrowError: false,
        unwrapError: false
      }
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

我试图使这种方法适应它自己的模块,如下所示:

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import {
  Log4ngService,
  ILog4ngServiceConfig,
  LOG4NG_SERVICE_CONFIG,
  LOG4NG_SERVICE_HANDLER_PROVIDERS,
  ErrorHandlerLoggingService,
  LOG4NG_ERROR_HANDLER_CONFIG,
  LOG4NG_ERROR_HANDLER_PROVIDERS
} from './src';

export * from './src';

@NgModule({
  imports: [
    CommonModule
  ],
  providers: [
    Log4ngService,
    ErrorHandlerLoggingService
  ]
})
export class Log4ngModule {
    static forRoot(config: ILog4ngServiceConfig = LOG4NG_SERVICE_CONFIG): ModuleWithProviders {
        return {
            ngModule: Log4ngModule,
            providers: LOG4NG_SERVICE_HANDLER_PROVIDERS
        };
    }

    static forChild(config: ILog4ngServiceConfig = LOG4NG_SERVICE_CONFIG): ModuleWithProviders {
        return {
            ngModule: Log4ngModule,
            providers: LOG4NG_SERVICE_HANDLER_PROVIDERS
        };
    }
}

我继续创建一个演示应用程序来使用这个模块并用于npm link本地使用库。虽然它完全构建,但尝试在演示应用程序中使用它时,我收到运行时错误:

Error: Can't resolve all parameters for Log4ngService: (?)

我不明白,因为据我所知,所有必要的 DI 令牌都已正确设置。

你可以在这个 git-repository 的 dev-branch 中找到代码:https ://github.com/LarsKumbier/log4ng/tree/dev

任何帮助和提示表示赞赏 - 在此先感谢!

4

1 回答 1

0

因为问题出在Log4ngService你可以使用这样的工厂

  /** Log4ngService factory */
    export function Log4ngServiceFactory(config: ILog4ngServiceConfig ) {
        return new Log4ngService (config);
    }  

    @NgModule({
      imports: [
        CommonModule
      ],
      providers: [
        ErrorHandlerLoggingService
      ]
    })
    export class Log4ngModule {
         static forRoot(config: ILog4ngServiceConfig = LOG4NG_SERVICE_CONFIG): ModuleWithProviders {
                return {
                    ngModule: Log4ngModule,
                    providers: [
                    { 
                       provide: Log4ngService,
                       useFactory: Log4ngServiceFactory,
                       deps : [config]
                    } 
                   ]
                };
            }
  }
于 2017-03-07T15:48:05.713 回答