首页 文章

Angular2 - 错误:无法解析IconService的所有参数

提问于
浏览
5

我一直在尝试将我的应用程序切换到AoT编译,并在应用程序加载时在 生产环境 环境中收到此错误(它在本地工作正常) .

Error: Can't resolve all parameters for IconService: (?, ?)

似乎错误来自提供IconService的模块 . 图标服务构造函数看起来像

constructor(private http:Http, private iconConfiguror:IconConfiguror) {

所以我的问题是这个错误是什么意思,为什么它只会在prod环境中发生(我尝试在本地启用prod模式)?

看起来这意味着没有提供http和图标配置参数,但是图标配置在app模块级别提供, HttpModule 导入 IconModule ,其中提供了 IconService .

@NgModule({
    imports: [
        CommonModule,
        HttpModule,
    ],
    declarations: [
        IconComponent,
    ],
    exports: [
        IconComponent,
    ],
    providers: [
        IconService,
        __platform_browser_private__.BROWSER_SANITIZATION_PROVIDERS,
    ],
})

和我们的图标组件的桶 .

export * from "./components/icon/icon.configuror";

export * from "./components/icon/icon.service.provider";

export * from "./components/icon/icon.service";

export * from "./components/icon/icon.component";

export * from "./components/icon/icon.module";

6 回答

  • 5

    通过以不同方式提供IconService来解决此问题 .

    {
            provide: IconService,
            useFactory: iconServiceFactory,
            deps: [Http, IconConfiguror],
        },
    

    和工厂本身

    export function iconServiceFactory(http: Http, iconConfiguror: IconConfiguror) {
        return new IconService(http, iconConfiguror);
    }
    

    我想由于某些原因没有提供Http(即使导入了HttpModule),所以我不得不将它声明为依赖项 .

  • 0

    导致此错误的一个可能原因是,如果您没有使用 @Injectable() 装饰 IconService 类 . 如果这是原因,在类声明之上添加该装饰将修复错误 .

  • 5

    我遇到过类似的问题 . 我通过更改桶中的出口订单来解决它 .

    基本服务文件:

    // dependency.service.ts
    @Injectable()
    export class DependencyService { }
    
    // dependant.service.ts
    import { DependencyService } from '.';
    
    @Injectable()
    export class DependantService {
        constructor(private dependency: DependencyService) { }
    }
    

    以下桶导致错误:

    // index.ts
    export * from './dependant.service';
    export * from './dependency.service';
    

    跟随一个作品:

    // index.ts
    export * from './dependency.service';
    export * from './dependant.service';
    
  • 0

    有时是修复它的单一方法 - 手动描述参数 .

    static get parameters() { return [Http, IconConfiguror] }
    
    constructor(private http:Http, private iconConfiguror:IconConfiguror) {
    
  • 2

    当我在app.module.ts中导入服务时使用以下内容时,为我工作

    {provide: AuthService,
        depends: HttpClientModule}
    
  • 1

    我的问题是我从一个基类继承,我用@Injectable装饰了这个基类 . 继承类是应该具有@Injectable属性的类,而不是基类 . 似乎当编译器看到@Injectable attibute时,它会检查以确保可以注入构造函数中的所有属性 . 如果没有,那就是错误 . 我通过从该类中删除@Injectable attibute来解决它 .

相关问题