我有一个类作为我从服务器获得的一些数据的模型。这个数据作为一个笨重的xml对象开始,其中文本节点具有属性,因此我将其转换为的json格式没有简单的字符串值。相反,我有:
@Injectable()
export class FooString {
_attr: string;
value: string;
isReadOnly(): boolean {
return this._attr && this._attr === 'ReadOnly';
}
isHidden(): boolean {
return this._attr && this._attr === 'Hid';
}
}
然后我的模型就像:
@Injectable()
export class Payment {
constructor(
public FooId: FooString,
public FooStat: FooString,
public FooName: FooString ) { }
}
一切都以FooString的相同实例结束。如何为每个实例获取离散实例?
我尝试过一个工厂,但它仍然只创建一个实例:
export let fooStringProvider = provide(FooString, {
useFactory: (): FooString => {
console.log('in foostring factory');
return new FooString();
}
});
答案 0 :(得分:3)
new FooString();
new Payment();
;-)
为什么使用DI时,如果他们没有依赖关系,并且您不想为每个提供商维护单个实例。因此,只需使用new
。
何时使用DI
使用DI而不是new
时,有一些标准是正确的:
MockBackend
为Http
。 如果有充分的理由使用DI,但您也想要新的实例,那么您可以提供工厂。
这个答案https://stackoverflow.com/a/36046754/217408包含一个具体的例子。
使用DI通常是一个好主意。恕我直言,没有强烈反对使用DI的论据。只有当上述参数都不适用并且提供工厂太麻烦时,请改用new Xxx()
。