工厂提供器使用场合:
No 1:根据某些条件来具体实例化某些对象
No 2:在实例化的时候---调用对象的构造函数的时候需要传递参数
工厂方法创建对象是一个单例对象,工厂方法只会在第一个需要注入的对象时被调用一次,然后在整个应用中所有被注入的**Service的实例都是同一个对象
《app-module.ts》:
providers:[ {
provide: ProductService,
useFactory:(logger:LoggerService , appConfig) => {
if(appConfig.isDev){
return new ProductService(logger);
}else{
return new AnotherProductService(logger);
}
},
deps:[ LoggerService, "APP_CONFIG"]//用来声明工厂方法所依赖的参数
}, LoggerService,
{
//provide: "IS_DEV" , useValue: false} //依赖注入变量
provide: "APP_CONFIG" , useValue: {isDev: false}
}
]
注释:LoggerService的提供器实例化一个LoggerService并将其注入到ProductService的工厂方法useFactory的参数里
《another-product.service.ts》:
@Injectable()
export class AnotherProductService implements ProductService{
constructor( public logger:AontherProductService) { }
}
《product.component.ts》:
export class ProductComponent implements OnInit {
product: Product;
constructor ( private productService:ProductService){ }
ngOnInit() {
this.product = this.productService.getProduct();
}
}
《product.service.ts》:
@Injectable()
export class ProductService{
constructor( public logger:LoggerService) { }
}
网友评论