通过前缀要求所有名称空间

时间:2018-11-21 21:06:20

标签: dependency-injection clojure clojure-java-interop

我有一个可以通过defmethod调用进行扩展的应用程序。应该在运行时中扩展应用程序,方法是将新的名称空间添加到包含其他defmethod调用的类路径中。

我正在寻找一种依赖注入解决方案。问题是:我的应用程序如何知道应该require应该使用哪些命名空间,以便defmethod调用才能生效?

  1. 一种解决方案是拥有一个中央配置文件,其中包含可能需要的名称空间的名称。缺点是要启用插件时,需要手动编辑配置。

  2. 另一种方法是以某种方式动态扫描类路径中的其他名称空间,并根据谓词(例如namespce名称前缀)要求它们。

我仅找到了这两种解决方案,但我想知道在Clojure中进行运行时依赖注入的其他方式可能是什么。以及通常用于此目的的库是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

Clojure地区通常使用3种依赖注入框架:

其中,Integrant可能最适合您的思维方式。但是,在过去,我认为我遇到了您要描述的问题,因此不再需要扫描名称空间。但是在足够的时间里,我意识到我正在以一种次优的方式来构造代码,并且以不同的方式思考使得代码更易于遵循,并同时解决了此向后依赖问题。您的情况可能会有所不同。搜索要加载的名称空间确实可行;)