我有這個配置文件,它具有數據接口,滾動條的默認配置,注入令牌能夠注入此配置和提供程序包含工廠返回默認配置對象deepClone模塊:當我需要自己的實例爲每個注入時,Angular 2 DI注入克隆對象的相同實例
export interface ScrollbarConfig {
name: string;
class: string;
options: MCustomScrollbar.CustomScrollbarOptions;
}
export const SCROLLBAR_CONFIG = new InjectionToken<ScrollbarConfig>('scrollbar.config');`
export const SCROLLBAR_CONFIG_DEFAULT: ScrollbarConfig = { ... }
export const SCROLLBAR_CONFIG_PROVIDER = {
provide: SCROLLBAR_CONFIG,
useFactory:() => {
return _.cloneDeep(SCROLLBAR_CONFIG_DEFAULT);
}
};
這是怎麼加提供商到我的模塊:
providers: [
SCROLLBAR_CONFIG_PROVIDER
]
這就是我如何在我的部件構造注入它:
constructor(@Inject(SCROLLBAR_CONFIG) private scrollbarConfig: ScrollbarConfig) {}
所以這個想法是獲得滾動條的默認配置,然後擴展每個組件的注入對象,所以每個組件都有自己的配置。但由於某些原因,即使我在工廠使用提供程序,注入也會給我相同的實例。我非常肯定它會產生一個默認對象的深層克隆,但隨後爲每次注入返回相同的克隆對象。我也試圖用創建類而不是注入令牌來做到這一點,但它的表現完全一樣。
我試圖把console.log()放在工廠函數中,它只打印一次所以顯然這是問題,但我怎麼能強迫它真正提供不同的實例?
當然,它返回相同的實例。提供者是單身人士(在相同的注射器內)。這裏重要的是如何使用這個提供者,這個問題需要澄清。 – estus
但我在我的問題中指定我只是將此提供程序傳遞給每個模塊中的提供程序數組 –
您尚未指定SCROLLBAR_CONFIG的使用方式和位置。這是必要的,以給出一個很好的答案。 – estus