Angular 获取错误“;Can';t解析ConfigService的所有参数“;

Angular 获取错误“;Can';t解析ConfigService的所有参数“;,angular,typescript,Angular,Typescript,在运行Angular 2(v4)应用程序时,我似乎遇到了以下错误。我似乎无法找出是什么导致了这一点,因为我有@Injectable vendor.dll.js:48569 Uncaught Error: Can't resolve all parameters for ConfigService: (?). at syntaxError (http://localhost:8080/vendor.dll.js:35507:34) [<root>] at Compile

在运行Angular 2(v4)应用程序时,我似乎遇到了以下错误。我似乎无法找出是什么导致了这一点,因为我有
@Injectable

vendor.dll.js:48569 Uncaught Error: Can't resolve all parameters for ConfigService: (?).
    at syntaxError (http://localhost:8080/vendor.dll.js:35507:34) [<root>]
    at CompileMetadataResolver._getDependenciesMetadata (http://localhost:8080/vendor.dll.js:48343:35) [<root>]
    at CompileMetadataResolver._getTypeMetadata (http://localhost:8080/vendor.dll.js:48211:26) [<root>]
    at CompileMetadataResolver._getInjectableMetadata (http://localhost:8080/vendor.dll.js:48197:21) [<root>]
    at CompileMetadataResolver.getProviderMetadata (http://localhost:8080/vendor.dll.js:48486:40) [<root>]
    at http://localhost:8080/vendor.dll.js:48414:49 [<root>]
    at Array.forEach (native) [<root>]
    at CompileMetadataResolver._getProvidersMetadata (http://localhost:8080/vendor.dll.js:48377:19) [<root>]
    at CompileMetadataResolver.getNgModuleMetadata (http://localhost:8080/vendor.dll.js:48033:50) [<root>]
    at CompileMetadataResolver.getNgModuleSummary (http://localhost:8080/vendor.dll.js:47887:52) [<root>]
    at http://localhost:8080/vendor.dll.js:47960:72 [<root>]
    at Array.forEach (native) [<root>]
    at CompileMetadataResolver.getNgModuleMetadata (http://localhost:8080/vendor.dll.js:47945:49) [<root>]
    at CompileMetadataResolver.getNgModuleSummary (http://localhost:8080/vendor.dll.js:47887:52) [<root>]
config.js

import { Injectable } from '@angular/core';
import { ModuleConfig } from './';

@Injectable()
export class ConfigService {
    CONFIG_OPTIONS: ModuleConfig;

    constructor(moduleConfig?: ModuleConfig) {
        this.CONFIG_OPTIONS = new ModuleConfig();
        this.setProperty('sortIcon', moduleConfig);
        this.setProperty('sortAscIcon', moduleConfig);
        this.setProperty('sortDescIcon', moduleConfig);
        this.setProperty('sortIconSelector', moduleConfig);
        this.setProperty('i18nEnabled', moduleConfig);
        this.setProperty('defaultI18nLocation', moduleConfig);
        this.setProperty('defaultI18nLang', moduleConfig);
        this.setProperty('noi18nMessage', moduleConfig);
    }

    getConfig(): ModuleConfig {
        return this.CONFIG_OPTIONS;
    }

    private setProperty(property, moduleConfig) {
        this.CONFIG_OPTIONS[property] = (moduleConfig && moduleConfig[property]) ? moduleConfig[property] : this.CONFIG_OPTIONS[property];
    }

}
import { Injectable } from '@angular/core';

@Injectable()
export class ModuleConfig {
    sortIcon? = 'fa-sort';
    sortAscIcon? = 'fa-sort-asc';
    sortDescIcon? = 'fa-sort-desc';
    sortIconSelector? = 'span.fa';
    i18nEnabled? = false;
    defaultI18nLocation? = 'global';
    defaultI18nLang? = 'en';
    noi18nMessage? = 'translation-not-found';
}
@NgModule
如下所示

import {
    ModuleConfig,
    ConfigService
} from './';

export const MODULE_CONFIG: ModuleConfig = {
    i18nEnabled: true,
    defaultI18nLang: 'en'
};

@NgModule({
    imports: [
    ],
    declarations: [
    ],
    providers: [
        {
            provide: ModuleConfig, useValue: MODULE_CONFIG
        },
        ConfigService,
        Title
    ],
    exports: [
    ]
})
export class SharedCommonModule {}

我假设Angulars DI不喜欢中的

constructor(moduleConfig?: ModuleConfig) {
我会尽量不带

constructor(moduleConfig: ModuleConfig) {
或者

constructor(@Inject(ModuleConfig) moduleConfig?: ModuleConfig) {

我认为如果目标是拥有一个可选的DI,
@optional
装饰器可能会工作。他提供了它,因此不需要
@Optional()
,但我也想知道
的目的是什么。也许要手动实例化它?如果没有提供
ModuleConfig
时它应该可以工作,那么您是对的,那么需要
@Optional()
。谢谢您的建议。我来看看@Optional@nixgadgets因此,这意味着您的
模块图
未定义,可能与错误路径或循环依赖关系有关。呃。它无法解析ModuleConfig路径,即使所有内容都已正确编译。编译器中是否有检测此问题的开关?