Ken*_*avR 16 dependency-injection typescript angular
我的构造函数具有可选参数,它们似乎混淆了主要的DI方式.
constructor(public name:string, public age?:number, private _service:Service);
Run Code Online (Sandbox Code Playgroud)
打字稿可以理解地不喜欢我在可选参数后面放置一个非可选参数,此外,当未设置可选参数时,不会注入服务.我该如何解决?我不能把它放在构造函数中的其他地方,因为我希望手动设置服务.
有没有像野外注射?
@Inject() private _service:Service;
constructor(public name:string, public age?:number);
Run Code Online (Sandbox Code Playgroud)
我应该用默认值替换可选参数吗?还有其他建议吗?
编辑: 如下所述,我试图将一个服务注入一个不是由Angular的DI创建的对象.这不起作用.由于我无法使用DI创建此类(模型),因此我现在从实例化此对象的类中手动传递服务.
Gün*_*uer 23
只需@Optional()在构造函数参数之前添加装饰器,只有在注册了提供程序时才应该注入该参数.
constructor(public name:string, @Optional() public age:number)
Run Code Online (Sandbox Code Playgroud)
如果我正确理解你想要做什么,你需要一个服务工厂。请参阅此处:https ://angular.io/docs/ts/latest/guide/dependency-injection.html#factory-provider
基本上,
class MyClass {
constructor(public name:string, private _service:Service, public age?:number){}
}
Run Code Online (Sandbox Code Playgroud)
进而
let myFactory = (_service: Service) => {
return isAgeOk ? new MyClass(name, _service, age) : new MyClass(name, _service);
};
Run Code Online (Sandbox Code Playgroud)
然后你应该像这样提供你的服务:
providers: [{ provide: MyClass, useFactory: MyFactory, deps: [Service]}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15931 次 |
| 最近记录: |