如何从另一个模块注入实现

尼克·西特拉基迪斯(Nick Tsitlakidis)

我有一个基于Dagger 2的项目,该项目包含两个模块。核心模块包括一些接口和一些类,这些类具有为这些接口声明的成员注入。

这些接口的实际实现包含在第二个模块中,该模块是一个Android项目。因此,这些项目的提供方法自然会包含在Android项目中。

Dagger在编译过程中会抱怨不知道如何将它们注入到核心模块中。

关于如何在不使用构造函数注入的情况下实现此目标的任何想法?

大卫·梅登雅克

简而言之,我只是尝试了一下,并且它起作用了。确保检查确切的错误消息,并确保提供了这些接口和@Inject注释。

可能只是某些错误的命名接口或缺少的注释。后续操作是使用您描述的体系结构的完整示例,并且可以很好地进行编译。您当前遇到的问题可能是本文最后一部分中描述的问题。如果可能的话,您应该采用第一个解决方案,并只添加那些注释。

图书馆

为了重现性,该样本具有极简模型。首先,我的类在库模块中所需的接口:

public interface MyInterface {
}

这是我需要该接口的课程。确保在构造函数中声明它并提供@Inject注释!

@MyScope // be sure to add scopes in your class if you use constructor injection!
public class MyClassUsingMyInterface {
    private MyInterface mMyInterface;

    @Inject
    public MyClassUsingMyInterface(MyInterface myInterface) {
        mMyInterface = myInterface;
    }
}

这个想法是,该接口将由应用使用MyClassUsingMyInterfacedagger并由dagger提供。代码已经很好地解耦了,并且我的功能强大的库没有那么多功能。

应用程序

这里需要提供实际的联轴器。这意味着要获得MyClassUsingMyInterface我们必须确保我们能够提供MyInterface让我们从提供以下内容的模块开始:

@Module
public class MyModule {
    
    @Provides
    MyInterface providesMyInterface() {
        return new MyInterface() {
            // my super awesome implementation. MIT license applies.
        };
    }
}

为了实际使用它,我们提供了一个可以注入到MyTestInjectedClass需要的组件中MyClassUsingMyInterface

@Component(modules = MyModule.class)
public interface MyComponent {
    
    void inject(MyTestInjectedClass testClass);
}

现在,我们可以提供所需的接口。我们在标记为的构造函数中声明了库类所需的接口@Inject现在,我需要一个需要很棒的库类使用的类。我想用匕首注入它。

public class MyTestInjectedClass {

    @Inject
    MyClassUsingMyInterface mMyClassUsingMyInterface;

    void onStart() {
        DaggerMyComponent.create().inject(this);
    }
}

现在我们进行编译...匕首将创建所有需要的工厂。

注入您无法修改的库

为了仅提供完整的匕首,该示例也可能没有实际访问库的源代码。如果没有@Inject注释,匕首将很难创建对象。注意缺少的注释:

public class MyClassUsingMyInterface {
    private MyInterface mMyInterface;

    public MyClassUsingMyInterface(MyInterface myInterface) {
        mMyInterface = myInterface;
    }
}

在这种情况下,我们必须手动提供该类。需要像下面这样修改模块:

@Module
public class MyModule {

    @Provides
    MyInterface providesMyInterface() {
        return new MyInterface() {
        };
    }

    @Provides
    MyClassUsingMyInterface providesMyClass(MyInterface myInterface) {
        return new MyClassUsingMyInterface(myInterface);
    }
}

这引入了更多代码供我们编写,但是将使您无法修改的那些类可用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在另一个模块内部动态注入一个模块?

来自分类Dev

如何在另一个模块内部动态注入一个模块?

来自分类Dev

将代码从一个模块/类注入另一个

来自分类Dev

如何将数据包直接注入到OMNet ++中的另一个模块

来自分类Dev

如何从另一个模块获取测试资源

来自分类Dev

如何从另一个模块调用xml布局

来自分类Dev

如何从另一个模块扩展模板?

来自分类Dev

如何从另一个模块调用函数

来自分类Dev

如何从另一个模块调用活动

来自分类Dev

如何从reactjs的另一个模块导出状态

来自分类Dev

如何从另一个模块应用插件

来自分类Dev

如何从另一个Angular项目加载模块?

来自分类Dev

如何从另一个模块扩展模板?

来自分类Dev

如何实现与另一个类同名的协议

来自分类Dev

如何实现另一个对象

来自分类Dev

AngularJS从同一模块将工厂注入另一个工厂

来自分类Dev

AngularJS从同一模块将工厂注入另一个工厂

来自分类Dev

如何确定一个模块是在另一个模块之前还是之后加载的

来自分类Dev

如何从一个模块向另一个模块发送消息?

来自分类Dev

如何从一个角度模块传递值到另一个模块?

来自分类Dev

如何在另一个模块加载之前加载一个模块?

来自分类Dev

如何在Android的另一个模块中访问一个模块的视图?

来自分类Dev

AngularJS-将工厂从另一个模块注入提供程序

来自分类Dev

无法将常量注入另一个模块配置

来自分类Dev

Rust依赖关系将特征的实现注入到另一个对象中

来自分类Dev

模块,导出另一个

来自分类Dev

模块如何使用Gradle多模块使用另一个模块的资源

来自分类Dev

即使模块没有依赖性,模块如何访问另一个模块

来自分类Dev

如何确定哪个模块是git中另一个模块的子模块?

Related 相关文章

  1. 1

    如何在另一个模块内部动态注入一个模块?

  2. 2

    如何在另一个模块内部动态注入一个模块?

  3. 3

    将代码从一个模块/类注入另一个

  4. 4

    如何将数据包直接注入到OMNet ++中的另一个模块

  5. 5

    如何从另一个模块获取测试资源

  6. 6

    如何从另一个模块调用xml布局

  7. 7

    如何从另一个模块扩展模板?

  8. 8

    如何从另一个模块调用函数

  9. 9

    如何从另一个模块调用活动

  10. 10

    如何从reactjs的另一个模块导出状态

  11. 11

    如何从另一个模块应用插件

  12. 12

    如何从另一个Angular项目加载模块?

  13. 13

    如何从另一个模块扩展模板?

  14. 14

    如何实现与另一个类同名的协议

  15. 15

    如何实现另一个对象

  16. 16

    AngularJS从同一模块将工厂注入另一个工厂

  17. 17

    AngularJS从同一模块将工厂注入另一个工厂

  18. 18

    如何确定一个模块是在另一个模块之前还是之后加载的

  19. 19

    如何从一个模块向另一个模块发送消息?

  20. 20

    如何从一个角度模块传递值到另一个模块?

  21. 21

    如何在另一个模块加载之前加载一个模块?

  22. 22

    如何在Android的另一个模块中访问一个模块的视图?

  23. 23

    AngularJS-将工厂从另一个模块注入提供程序

  24. 24

    无法将常量注入另一个模块配置

  25. 25

    Rust依赖关系将特征的实现注入到另一个对象中

  26. 26

    模块,导出另一个

  27. 27

    模块如何使用Gradle多模块使用另一个模块的资源

  28. 28

    即使模块没有依赖性,模块如何访问另一个模块

  29. 29

    如何确定哪个模块是git中另一个模块的子模块?

热门标签

归档