无法使用ASP Core 1.1在角度2中注入服务

时间:2017-06-23 05:02:13

标签: angular typescript dependency-injection asp.net-core single-page-application

我正在使用Yeoman generator-aspnetcore-spa,我试图在Angular 2中为我的应用注入服务 所以我在sharedConfig中添加了providers: [ CommService]" app.module.shared.ts" 当我试图运行应用程序时

  

异常:调用节点模块失败并显示错误:错误:未捕获(在承诺中):错误:没有CommService的提供者!   错误:没有CommService的提供者!

@Injectable()
export class CommService {

  constructor(private http: Http) { }


  getUserIP() {
    return this.http.get('http://api.ipify.org/?format=json')
      .map(x => x.json());
  }

}

我尝试在boot-server.ts中的提供程序中添加服务 这就是我得到的东西

  

异常:调用节点模块失败并显示错误:错误:未捕获(在承诺中):错误:没有Http的提供者! (CommService - > Http)   错误:没有Http提供商! (CommService - > Http)   在错误(本机)

我有三个模块文件

  • app.module.shared.ts,其中包含

```

export const sharedConfig: NgModule = {
    bootstrap: [ AppComponent ],
    declarations: [
        AppComponent,
        NavMenuComponent,
        CounterComponent,
        FetchDataComponent,
        HomeComponent,
        LoginComponent
    ],
    imports: [
        RouterModule.forRoot([
            { path: '', redirectTo: 'home', pathMatch: 'full' },
            { path: 'home', component: HomeComponent },
            { path: 'counter', component: CounterComponent },
            { path: 'fetch-data', component: FetchDataComponent },
            { path: 'login', component: LoginComponent },
            { path: '**', redirectTo: 'home' }
        ])
    ]
};

```

  • app.module.server.ts,其中包含

```

@NgModule({
    bootstrap: sharedConfig.bootstrap,
    declarations: sharedConfig.declarations,
    imports: [
        ServerModule,
        ...sharedConfig.imports
    ]
})
export class AppModule {
}

```   - 包含

的app.module.client.ts

```

@NgModule({
    bootstrap: sharedConfig.bootstrap,
    declarations: sharedConfig.declarations,
    imports: [
        BrowserModule,
        FormsModule,
        HttpModule,
        ...sharedConfig.imports
    ],
    providers: [
        { provide: 'ORIGIN_URL', useValue: location.origin } 
    ]
})
export class AppModule {
}

```

所以我可以导入和注入我的服务

2 个答案:

答案 0 :(得分:0)

我猜你在CommService中使用Http服务?如果您还提供了遇到困难的CommService类,那将非常有用。

当您在服务器和客户端使用的共享配置中提供CommService时,这两者都需要导入HttpModule。在您的情况下,只有客户端的应用程序模块导入HttpModule。如果您尝试在服务器上使用CommService,那么HttpModule将没有提供商,我猜您正在使用CommService。

您的问题与asp.net无关,因为这与Angular中的导入/模块有关。 https://angular.io/guide/ngmodule

答案 1 :(得分:0)

最后,我通过将服务添加到app.module.client,app.module.server以及像这样的boot-client解决了这个问题

conda install -n my-conda-env -c conda-forge rtree shapely