【发布时间】:2018-09-24 01:20:01
【问题描述】:
我在伞形项目设置中有三个应用程序
- 数据层
- ApiLayer
- OtherLayer 一些其他层(但必须)
现在我在混合文件中定义了这样的依赖项 应用 ApiLayer 有
{:OtherLayer, in_umbrella: true},
{:Datalayer, in_umbrella: true}
App Datalayer 不依赖伞形应用 应用OtherLayer有
{:Datalayer, in_umbrella: true}
但是从应用 ApiLayer 调用的测试用例需要调用 Datalayer 中定义的上下文,而 Datalayer 的上下文又需要访问OtherLayer 的一些功能,但不能。因为如果我在 Datalayer 中添加它的依赖项。这将是循环依赖情况。我需要通过我的测试用例。有没有办法在不创建循环依赖的情况下加载一些代码块? 任何帮助将不胜感激。谢谢
【问题讨论】:
-
我尝试了一些解决方案,例如动态要求该模块但没有奏效,并尝试了 test_helper 中的 ensure_all_started 选项,但得到了 {:error, {:m, {:invalid_restart_type, :data_layer}}}跨度>
-
如果它们真的如此集成,它们可能不应该是单独的应用程序。一种解决方案可能是通过将模块传递给函数来处理这种通信。例如,如果您的 ApiLayer 中有一个调用 DataLayer 的方法,但 DataLayer 还需要来自 OtherLayer 的值,您可以在 DataLayer 中设计函数以接受模块作为参数并将其传递给 ApiLayer。
def my_func(x), do: DataLayer.Module.func(x, OtherLayer.DependencyModule)
标签: dependencies elixir phoenix-framework ex-unit