【Kotlin中使用Dagger2】基础入门篇(二)

目录

1. MainModule

2. MainPresenter

3. MainComponent

4. MainActivity

1.1 MainModule_ProvideStringFactory

2.1 MainPresenter_Factory 

3.1 DaggerMainComponent 

4.1 MainActivity_MembersInjector


@Inject+@Component+@Module(含@Provides)

有些实例类型,我无法掌控

别慌!@Module来帮忙

两种情况

  1. 你要注入的实例的类型就不是你自己写的类,无法使用@inject
  2. 你要注入的实例的类型就是你自己写的类,但是带了一个参数,这个参数类型的类不是你自己写的,无法使用@inject

1. MainModule

@Module
class MainModule{
    @Provides
    fun provideString():String{
        return  "我是String,你能在我的构造方法上加@inject吗?是的,你不能!"
    }
}

2. MainPresenter

class MainPresenter @Inject constructor(var name:String) {

    fun doSomething():String{
        return "This is result$name"
    }
}

3. MainComponent

@Component(modules = [MainModule::class])
interface MainComponent {
    fun inject(activity: MainActivity)
}

4. MainActivity

class MainActivity : Activity() {

    @Inject
    lateinit var value:String
    @Inject
    lateinit var presenter: MainPresenter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        DaggerMainComponent.builder().build().inject(this)
       // mPresenter.doSomething()
        Toast.makeText(this,presenter.doSomething(),Toast.LENGTH_SHORT).show()
        Toast.makeText(this,value,Toast.LENGTH_SHORT).show()
    }
}

1.1 MainModule_ProvideStringFactory

public final class MainModule_ProvideStringFactory implements Factory<String> {
  private final MainModule module;

  public MainModule_ProvideStringFactory(MainModule module) {
    this.module = module;
  }

  @Override
  public String get() {
    return provideString(module);
  }

  public static MainModule_ProvideStringFactory create(MainModule module) {
    return new MainModule_ProvideStringFactory(module);
  }

  public static String provideString(MainModule instance) {
    return Preconditions.checkNotNullFromProvides(instance.provideString());
  }
}

2.1 MainPresenter_Factory 

public final class MainPresenter_Factory implements Factory<MainPresenter> {
  private final Provider<String> nameProvider;

  public MainPresenter_Factory(Provider<String> nameProvider) {
    this.nameProvider = nameProvider;
  }

  @Override
  public MainPresenter get() {
    return newInstance(nameProvider.get());
  }

  public static MainPresenter_Factory create(Provider<String> nameProvider) {
    return new MainPresenter_Factory(nameProvider);
  }

  public static MainPresenter newInstance(String name) {
    return new MainPresenter(name);
  }
}

3.1 DaggerMainComponent 

public final class DaggerMainComponent implements MainComponent {
  private final MainModule mainModule;

  private DaggerMainComponent(MainModule mainModuleParam) {
    this.mainModule = mainModuleParam;
  }

  public static Builder builder() {
    return new Builder();
  }

  public static MainComponent create() {
    return new Builder().build();
  }

  private MainPresenter mainPresenter() {
    return new MainPresenter(MainModule_ProvideStringFactory.provideString(mainModule));
  }

  @Override
  public void inject(MainActivity activity) {
    injectMainActivity(activity);
  }

  private MainActivity injectMainActivity(MainActivity instance) {
    MainActivity_MembersInjector.injectValue(instance, MainModule_ProvideStringFactory.provideString(mainModule));
    MainActivity_MembersInjector.injectPresenter(instance, mainPresenter());
    return instance;
  }

  public static final class Builder {
    private MainModule mainModule;

    private Builder() {
    }

    public Builder mainModule(MainModule mainModule) {
      this.mainModule = Preconditions.checkNotNull(mainModule);
      return this;
    }

    public MainComponent build() {
      if (mainModule == null) {
        this.mainModule = new MainModule();
      }
      return new DaggerMainComponent(mainModule);
    }
  }
}

4.1 MainActivity_MembersInjector

public final class MainActivity_MembersInjector implements MembersInjector<MainActivity> {
  private final Provider<String> valueProvider;

  private final Provider<MainPresenter> presenterProvider;

  public MainActivity_MembersInjector(Provider<String> valueProvider,
      Provider<MainPresenter> presenterProvider) {
    this.valueProvider = valueProvider;
    this.presenterProvider = presenterProvider;
  }

  public static MembersInjector<MainActivity> create(Provider<String> valueProvider,
      Provider<MainPresenter> presenterProvider) {
    return new MainActivity_MembersInjector(valueProvider, presenterProvider);
  }

  @Override
  public void injectMembers(MainActivity instance) {
    injectValue(instance, valueProvider.get());
    injectPresenter(instance, presenterProvider.get());
  }

  @InjectedFieldSignature("com.example.myapplication.MainActivity.value")
  public static void injectValue(MainActivity instance, String value) {
    instance.value = value;
  }

  @InjectedFieldSignature("com.example.myapplication.MainActivity.presenter")
  public static void injectPresenter(MainActivity instance, MainPresenter presenter) {
    instance.presenter = presenter;
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值