2017-07-19 65 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