主要解决一个问题!我一开始就认为Module返回对象是一个关键,如果Module 定义了 2个供给方法,返回值一样会有啥后果呢??
例如:
public class TestBean { public String value; @Inject public TestBean(String value) { this.value = value; } }
@Module public class TestModule { @Provides public String providesStringValue(){ return "我是第一"; } @Provides public String providesStringValue2(){ return "我是第二"; } }
@Component(modules = {TestModule.class}) public interface TestComponent { void inject(MainActivity mainActivity); }
可以看到TestMoudle返回了2个String类型的Provides注解的方法,哪构建TestBean的时候参数会用那个呢??测试下!!
Error:(11, 10) 错误: java.lang.String is bound multiple times: @Provides String com.example.wenyingzhi.myapplication.TestModule.providesStringValue() @Provides String com.example.wenyingzhi.myapplication.TestModule.providesStringValue2()
直接报错
如何解决呢??看代码
public class MainActivity extends AppCompatActivity { @Inject @Named("value1")//注意 public TestBean testBean; @Inject @Named("value2")//注意 public TestBean testBean2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DaggerTestCompenent.create().inject(this); log(testBean.value); log(testBean2.value); } public void log(String value){ Log.d("wyz", value); } }
@Module public class TestModule { @Named("value1") @Provides public TestBean providesTestBean1(){ return new TestBean("我是第一"); } @Named("value2") @Provides public TestBean providesTestBean2(){ return new TestBean("我是第二"); } }
看输出:
04-19 18:14:19.187 25685-25685/com.example.wenyingzhi.myapplication D/wyz: 我是第一 04-19 18:14:19.188 25685-25685/com.example.wenyingzhi.myapplication D/wyz: 我是第二看见没2个不同的对象