如何从库中扩展angular服务,以便将同一库中定义的构造函数参数类型传递给它?

如何从库中扩展angular服务,以便将同一库中定义的构造函数参数类型传递给它?,angular,Angular,我正在尝试从以下位置扩展MultiWindowsService服务: 但是,最后一个参数在生成时会导致问题--aot: 警告:无法在C:/dev/web/multiwindowproto/src/app/my-multiwindow.service.ts:([object object]、[object object]、[object object]、[object object]、[object object]、?)中解析MyMultiwindowService的所有参数 在app.modul

我正在尝试从以下位置扩展MultiWindowsService服务:

但是,最后一个参数在生成时会导致问题--aot:

警告:无法在C:/dev/web/multiwindowproto/src/app/my-multiwindow.service.ts:([object object]、[object object]、[object object]、[object object]、[object object]、?)中解析MyMultiwindowService的所有参数

在app.module中,我有:

// core etc imports omited
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { MapviewComponent } from './mapview/mapview.component';
import { ContentComponent } from './content/content.component';
import { ThreedeegraphicsComponent } from './threedeegraphics/threedeegraphics.component';

import { MultiWindowConfig, MultiWindowModule, WindowSaveStrategy, NGXMW_CONFIG } from 'ngx-multi-window';

const config: MultiWindowConfig = {windowSaveStrategy: WindowSaveStrategy.SAVE_WHEN_EMPTY};

@NgModule({
  declarations: [
    AppComponent,
    MapviewComponent,
    ContentComponent,
    ThreedeegraphicsComponent
  ],
  imports: [
    BrowserModule,
    FormsModule, ReactiveFormsModule,
    MultiWindowModule.forRoot(config),
    AppRoutingModule,

  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { 
}

那么,如何定义/提供扩展服务的配置呢?

这是因为尚未创建MultiWindowConfig对象。如果是@Injectable,则需要在提供程序中设置多窗口配置。 如果没有,则可以使用factory模型()创建对象。首先为类创建工厂和提供程序:

const MyMultiwindowServiceFactory = (location: Location, storageService: StorageService, windowRef: WindowRef, router: Router, authService: AuthService) => {
    const config: new MyMultiWindowConfig();
    return new MyMultiwindowService(location, storageService, windowRef, router, authService, config)
}

export let MyMultiwindowServiceProvider = {
   provide: MyMultiwindowService,
   useFactory: MyMultiwindowServiceFactory,
   deps: [Location, StorageService, WindowRef, Router, AuthService]
}
然后在您的app.module.ts中导入提供商并提供:

import {MyMultiwindowServiceProvider } from './services/my-multi-window.service.ts'
    @NgModule({
  .....other code
  providers: [MyMultiwindowServiceProvider, ....other services],
  bootstrap: [AppComponent]
})

现在,每当您引用MyMultiWindowsService时,提供商都会提供一个带有您在出厂时设置的配置的服务实例。

谢谢!我明天试试这个。MultiWindowConfig是一个接口,所以我想我不能完全这样做。然而,我阅读了你的链接来了解这里发生了什么。它应该仍然有效,你可以将接口导入组件文件。让我知道进展如何。谢谢!工厂/供应商代码放在哪里?我已经阅读了示例,在angular.io中,它位于单独的文件(我猜是类)中。这不起作用。我将代码放在与MyMultiWindowsService类相同的文件中。但正如我所说的,MultiWindowConfig是一个接口,因此不能像在new中那样使用它。我还尝试创建我自己的类来实现接口,但最后一个参数的警告是相同的。再次感谢!你能编辑一下吗?这样我就可以接受答案了?也可以使用工厂->使用工厂和提供->提供。
const MyMultiwindowServiceFactory = (location: Location, storageService: StorageService, windowRef: WindowRef, router: Router, authService: AuthService) => {
    const config: new MyMultiWindowConfig();
    return new MyMultiwindowService(location, storageService, windowRef, router, authService, config)
}

export let MyMultiwindowServiceProvider = {
   provide: MyMultiwindowService,
   useFactory: MyMultiwindowServiceFactory,
   deps: [Location, StorageService, WindowRef, Router, AuthService]
}
import {MyMultiwindowServiceProvider } from './services/my-multi-window.service.ts'
    @NgModule({
  .....other code
  providers: [MyMultiwindowServiceProvider, ....other services],
  bootstrap: [AppComponent]
})