的背景:我在Dagger2应用程序中使用Android进行依赖项注入,并且想将一个对象作为单例注入到我的BaseActivity中,以在整个应用程序中使用,但是该对象的值只能在身份验证后设置流程及其价值取决于身份验证的结果。构建:这是我当前的设置:public interface Tool { ...}public class ToolOne implements Tool { ...}public class ToolTwo implements Tool { ...}一个通用接口及其两个不同的实现。public class ToolConfig { private Tool currentTool; public ToolConfig(Tool tool) { this.currentTool = tool; } ...}一个类,用作配置,并在整个应用程序中使用。@Provides@PerApplicationToolConfig provideToolConfig(Tool tool) { return new ToolConfig(tool);}在我的Dagger工具模块中定义配置的方式。这将注入到BaseActivity中,以供所有类使用。任务:如何为配置设置currentTool的值?根据身份验证过程,应将ToolOne或ToolTwo设置为currentTool的值。如果再次执行身份验证过程,则应该可以更改它。设置一次后,这种情况很少发生,但是可能会发生,我想确保始终使用相同的对象实例。有没有推荐的方法可以使用Dagger2做到这一点? 最佳答案 您可以只定义在它们之间重定向的@Provides方法:@Provides Tool provideTool( AuthenticationController authController, Provider<ToolOne> toolOneProvider, Provider<ToolTwo> toolTwoProvider) { if (authController.useToolTwo()) { return toolTwoProvider.get(); } return toolOneProvider.get();}但是,在这种情况下,您需要非常小心,仅注入Provider<Tool>(每次调用get时都会检查AuthController),而不是Tool(当 -injected类已创建,但不会自动更新)。因此,创建自定义的单方法ToolProvider可能是有意义的,在该方法中,您可以根据需要在@Provides方法中注入三个dep,然后将当前工具作为Tool调用返回(等)。
09-05 11:21