2017-07-19 64 views
0

爲了更好地測試和分離前端/後端開發,我們目前正試圖找到一種在devMode中提供模擬服務實現的動態方法。Angular2注入器 - 動態選擇服務實現

這個想法是在你的環境中指定哪些服務應該被模擬,然後讓注入器根據這個返回真實或模擬的實現。

現在的問題是,如果可以爲注射器提供的每項服務動態執行此操作,或者如果我們必須爲每項服務使用單獨的工廠(做同樣的事情),現在的問題是?

// pseudo code 
onRequestProviderFor(serviceName) 
{ 
    if(environment.mockTheseServices.contains(serviceName)) 
    { 
    return new "Mock"+serviceName.ts 
    } 
    else 
    { 
    return new serviceName.ts 
    } 
} 

這可能嗎?並且在注入程序中有沒有鉤子可以用來做到這一點(在devMode中)?

+0

我認爲你需要一個單獨的工廠爲每一項服務。你可以做一些代碼生成,更新桶文件,以便相同的導入導致不同的類。 –

+0

您可以在引導應用程序時添加自定義提供程序,您是否嘗試過? – jonrsharpe

+0

你打算在生產環境中使用那個代碼'environment.mockTheseServices.contains(serviceName)'嗎? –

回答

1

您是否考慮過使用諸如https://github.com/typicode/json-server之類的東西來創建單獨的模擬服務器?

我認爲它會保持你的項目代碼更清潔,不在相同的代碼庫中包含模擬服務。

+0

有趣,非常感謝,我會研究這個! – TommyF