我为angular2编写了一个远程记录器,工作正常。我现在想将它作为自己的npm库发布,并努力使其可用。我专注于ngx-translate模块的设置。
我在内部使用的记录器的常规设置类似于Ben Nadel's Custom Error Handler Post中描述的记录器:
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
任何帮助和提示都表示赞赏 - 提前感谢!
答案 0 :(得分: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]
}
]
};
}
}