我很熟悉依賴注入如何在Angular 2中工作,但我試圖弄清楚特定用例是可能。總之,我想有一個注入了像這樣的依賴子組件:Angular 2 - 如何從只有父組件的每個子組件提供依賴項的新實例
@Component({
selector: 'child',
template: `
<div class="child">
<span><a href="#" (click)="idService.regenerate()">Regenerate</a></span>
<span>{{idService.id}}</span>
</div>
`
})
export class ChildComponent {
constructor(
protected idService: IdService
)
{}
}
在較高的水平我的組件樹我使用providers: [IdService]
注入服務的不同實例。這一切都有道理,並沒有給我一個問題。不過,我想了解的是,如果這是可能的,而不在組件註釋創建一個具有自己providers: [...]
屬性的子組件的「複製」:
https://plnkr.co/edit/ZMYNIH7lB0Oi6EBSYmfB?p=preview
在那個例子中,你會看到最下面的一組組件分別獲得了IdService類的一個新實例,但這是因爲它們實際上是一個專門請求新實例的新組件。
我想知道的是,如果有一種方法可以簡單地用父組件實現這一點?就像能夠說「每次一個子組件試圖解決這個特定的依賴關係時給一個新實例」一樣?
是的,這是事實,但用這種方法,我在樹的任何給定的水平還僅限於單個實例。如果我想要在子級別的獨特實例,我需要在那裏提供userFactory。我希望知道當一個實例在更高層創建時是否可以控制,但並不總是在該層次上的單例。 –
似乎我錯過了您的評論。通過這種方式'let user = this.userFactory()'爲每個調用創建一個新實例,無論在哪個級別。 DI僅維護工廠功能的單個實例,但不維護其創建的實例。 –