【问题标题】:Guice Dependency Injection between different projects不同项目之间的Guice依赖注入
【发布时间】:2017-04-11 13:29:18
【问题描述】:

最初我开始制作 Play!具有 ControllerProcessorDAO 的 Java 项目。我使用 Google Guice 的 @ImplementedBy 为我的 Processor 接口使用依赖注入,我的 ProcessorImpl 实现了它。

现在,我创建了另一个项目,它也需要Processor。所以我将接口提取到另一个单独的项目中,比如 common,这两个项目使用该公共项目作为引用库。

问题是,我将无法再使用@ImplementedBy,因为该公共项目将没有两个项目的引用。由于这是不可能的,我无法进行依赖注入。如果不提供@ImplementedBy,我会收到以下错误:

play.api.UnexpectedException: Unexpected exception[ProvisionException: Unable to provision, see the following errors:

1) No implementation for com.processor.Processor was bound.

有没有办法在配置文件中配置依赖项?或者可以在实现的类中注入依赖?

【问题讨论】:

    标签: java dependency-injection playframework guice


    【解决方案1】:

    在您的 ProcessorImpl 所在的项目中创建一个 guice 模块。

    public class Module extends AbstractModule {
        protected void configure() {
             bind(Processor.class).to(ProcessorImpl.class);
        }
    }
    

    在需要的地方注入处理器。

    如果你调用这个模块Module并将它放在根包中,它会自动注册到Play。

    【讨论】:

    • 我也创建了这个模块。但是你所说的根包是什么意思?我创建了自己的包并将其放入该包中。另外,我在函数顶部使用了@Override
    • 如果你已经把它放在你的包里,检查你是否在 application.conf 中添加了 play.modules.enabled += "modules.Module" 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多