【发布时间】:2018-08-29 19:17:08
【问题描述】:
我尝试了来自 SO 和 github 问题的所有变体。
问题:我从私有 npm 存储库中获得了自定义模块。本模块由 angular-cli 制作,由 ng-packagr 发布。
我的项目是使用@ngtools/webpack 构建的。只需代码:
app.module.ts
import { MyHeaderModule } from 'my-header/src/app/modules/my-header/my-header.module';
import { PORTAL_URL, MAINHOME_URL, CURRENT_USER_LOGIN } from 'my-header/src/app/modules/my-base/base.service';
function initConfigFactory() {
return Promise.resolve("login");
}
@NgModule({
imports: [ BrowserModule, FormsModule, HttpModule, JsonpModule, RouterModule.forRoot(RoutesConfig), MyHeaderModule.forRoot()],
declarations: (<any> [ AppComponent ]).concat(Object.values(Components), Object.values(Directives), Object.values(Pipes)),
providers: (<any> Object.values(Services)).concat([
DatePipe,
{ provide: LOCALE_ID, useValue: "ru-RU" },
{ provide: PORTAL_URL, useValue: environment.portalUrl },
{ provide: MAINHOME_URL, useValue: environment.mainHomeUrl },
{ provide: CURRENT_USER_LOGIN, useFactory: initConfigFactory, multi: true }
]),
bootstrap: [ AppComponent ],
schemas: [ NO_ERRORS_SCHEMA ]
})
export class AppModule {}
navigation.service.ts
import { BaseService, PORTAL_URL, MAINHOME_URL, CURRENT_USER_LOGIN } from '../my-base/base.service';
@Injectable()
export class NavigationService extends BaseService {
protected serviceUrl = this.mainHomeUrl + '/api/v1.0/navigation';
constructor(protected http: Http,
@Inject(PORTAL_URL) public portalUrl: string,
@Inject(MAINHOME_URL) public mainHomeUrl: string,
@Inject(CURRENT_USER_LOGIN) public userLogin: any
) {
super(http, portalUrl, mainHomeUrl);
}
...
}
base.service.ts
export const PORTAL_URL = new InjectionToken<string>('');
export const MAINHOME_URL = new InjectionToken<string>('');
export const CURRENT_USER_LOGIN = new InjectionToken<Function>(null);
@Injectable()
export abstract class BaseService {...}
那就给我
错误:无法解析 NavigationService 的所有参数:([object Object], [object Object], [object Object], ?)
【问题讨论】:
-
似乎没有在 app.module 的提供程序中列出
CURRENT_USER_LOGIN是问题的一部分。我从未尝试过使用容器提供函数,所以我不知道这是否可行。您是否在另一个模块中提供CURRENT_USER_LOGIN? -
我试过这个变种。错误是一样的
-
好吧,当
定义为 Function 时,我不太确定 InjectionToken 是否可以包含 null。如果替换 export const CURRENT_USER_LOGIN = new InjectionToken (null); 会发生什么错误?通过 export const CURRENT_USER_LOGIN = new InjectionToken ('');代替? -
我可以试试这个,但不能将此修复添加到此模块存储库中。使用此模块的所有其他项目都没有此错误。我认为重点是我的项目没有使用 angular-cli。
标签: angular typescript webpack dependency-injection webpack-dev-server