【发布时间】:2021-03-12 09:28:08
【问题描述】:
我正在做一个项目,遇到了一个没有 @Injectable() 装饰器的服务,并且工作正常。到现在为止,我的印象是,如果我们想实现 DI,我们必须使用 @injectable() 装饰器并使用提供程序配置它。使用提供者配置服务是强制性的,但似乎使用 @injectable() 装饰器不是。它仅在某些服务中使用。我注意到使用装饰器的服务和不使用装饰器的服务的唯一区别是前者本身有一些依赖关系,而后者没有
我有两种服务:
类型1:
export class SharedService {
//do something
}
类型2:
@Injectable()
export class MainCreditService {
constructor(private http: Http, private config: Config) {
this.config.EndPoints.subscribe(endpointObj => {
this.environment = endpointObj;
});
}
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { FormsModule, ReactiveFormsModule} from '@angular/forms';
import { HttpClientModule} from '@angular/common/http'
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule,
AppRoutingModule,
],
exports: [],
providers: [MainService,SharedService],
bootstrap: [AppComponent]
})
export class AppModule { }
app.component.ts
import { Component } from '@angular/core';
import { HttpClient } from "@angular/common/http";
import { MainService } from '../../services/main.service';
import { SharedService } from '../../services/shared.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(private mainservice: MainService, private sharedService:
SharedService) {
//doSomething
}
为什么一个需要@Injectable() 而另一个不需要
我看过一些关于 DI 的视频并浏览了一些文章,但仍然很难理解我们应该在哪里使用这个装饰器以及为什么。有人可以解释一下这个装饰器的目的吗,或者粘贴链接到解释得很好的来源。
【问题讨论】:
标签: angular dependency-injection decorator angular-services