目录
1.1 MainModule_ProvideStringFactory
4.1 MainActivity_MembersInjector
@Inject+@Component+@Module(含@Provides)
有些实例类型,我无法掌控
别慌!@Module来帮忙
两种情况
- 你要注入的实例的类型就不是你自己写的类,无法使用@inject
- 你要注入的实例的类型就是你自己写的类,但是带了一个参数,这个参数类型的类不是你自己写的,无法使用@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;
}
}