Dagger2之Named--第四章

主要解决一个问题!我一开始就认为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个不同的对象

猜你喜欢

转载自blog.csdn.net/wenyingzhi/article/details/80008315