我正在try 为库模块创建一个提供程序,当添加该提供程序时会触发我的工厂提供程序.然而,当我这样做时,提供程序从来没有执行console.log
,所以我知道它没有运行.
下面是我try 实例化的示例服务:
@Injectable()
export class ExampleService {
addOptions(...options: any[]) {
// Set options
}
}
在创建模块时,我希望创建服务并向其添加一些默认选项,因此我创建了一个工厂提供程序,因为我不想在组件级别添加它,或者为ExampleService
的每个实例添加它.这一模块只有一次机会.
@NgModule({
declarations: [ExampleComponent],
exports: [ExampleComponent],
providers: [
{
provide: ExampleService,
multi: false,
useFactory: () => {
console.log('Creating Example Service...');
const service = new ExampleService();
service.addOptions('one', 'two', 'three');
return service;
}
}
],
})
export class LibraryModule {}
我也有一个组件,我也想将服务注入其中,但不与模块中的组件共享同一个实例,所以我这样做了:
@Component({
providers: [ExampleService]
})
export class ExampleComponent {
constructor(private example: ExampleService) {}
}
当我公司的一个团队使用我们的库时,他们会像这样导入它,并且选项会从LibraryModule
自动设置.
@NgModule({
imports: [LibraryModule]
})
export class App {}
目前,组件中的一个按预期创建,但模块中的一个没有运行工厂,因为我看不到console.log
的输出.我需要做什么来解决这个问题?或者,这不是正确的方法吗?
Note:我正在用故事书测试这个,不确定这是否有区别.
看起来像这样:
@Component({
standalone: true,
imports: [LibraryModule]
})
export class StorybookExample {
constructor(private example: ExampleService) {}
}
export default {
title: 'Test',
component: StorybookExample,
} as Meta<StorybookExample>;