men*_*eno 3 dependency-injection angular
如果我有一个A依赖于某个服务的Angular 模块S。但我不想直接实现服务,而是想处理一个接口I,并让消费者A在导入它时传递实际的实现。该实现将是一个用 @Injectable 装饰的 Angular 服务,并且有自己的依赖项。
这在 Angular 中可行吗?若有,实施步骤为何?
要存档此内容,您可以使用abstract classes而不是interfaces使实现可交换:
app/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo.service.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 abstract-foo.provider.ts\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo.module.ts\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo.component.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app.module.ts\nRun Code Online (Sandbox Code Playgroud)\n\n现在有以下文件:
\n\n// foo.service.ts\n@Injectable()\nexport class FooService extends AbstractFooProvider {\n ctor(private _fooDependency: SomeOtherFooService){}\n foo(): boolean {\n return this._fooDependency.isFoo();\n }\n}\n\n// foo.module.ts\n@NgModule({\n declarations: [FooComponent],\n exports: [FooComponent]\n})\nexport class FooModule {\n static withConfiguration(implementationProvider: Provider): ModuleWithProviders {\n return {\n ngModule: FooModule,\n providers: [implementationProvider]\n };\n }\n}\n\n// abstract-foo.provider.ts\nexport abstract class AbstractFooProvider {\n foo(): boolean;\n}\n\n// foo.component.ts\n@Component({})\nexport class FooComponent {\n ctor(private _fooProvider: AbstractFooProvider){}\n}\n\n// app.module.ts \n\nexport const FOO_PROVIDER : ClassProvider = {\n provide: AbstractFooProvider, \n useClass: FooService\n};\n\n@NgModule({\n imports: [\n FooModule.withConfiguration(FOO_PROVIDER)\n ]\n})\nexport class AppModule {}\nRun Code Online (Sandbox Code Playgroud)\n