Dagger 2:如何使用片段注入
Dagger 2: How to use injection with a Fragment
我正在使用 AndroidInjection.inject(this)
将组件注入 activity。
AndroidInjection
也有一个重载方法,将 android.app.Fragment
作为参数。但是我的片段extend android.support.v4.app.Fragment
并没有对应的方法
问题:如果片段扩展android.support.v4.app.Fragment
如何使用注入?
对于支持库片段,您需要使用支持注入。这里有一些例子:
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class, // Important
ActivityModule.class,
FragmentModule.class
})
public interface AppComponent extends AndroidInjector<App> {
void inject(App app);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
Application,如果需要,可以使用 DaggerApplication 或简单的 HasSomeIjection Multidex implementation:
public class App extends MultiDexApplication implements
HasActivityInjector,
HasFragmentInjector {
@Inject DispatchingAndroidInjector<Activity> activityInjector;
@Inject DispatchingAndroidInjector<Fragment> fragmentInjector;
private AppComponent mComponent;
@Override
public void onCreate() {
mComponent = DaggerAppComponent.builder().application(this).build();
mComponent.inject(this);
}
// Dependency Injection
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return activityInjector;
}
@Override
public DispatchingAndroidInjector<Fragment> fragmentInjector() {
return fragmentInjector;
}
}
下一个模块:
@Module
public abstract class FragmentModule {
@ContributesAndroidInjector
abstract ContactsFragment bindContactsFragment();
}
Activity 模块:
@Module
public abstract class ActivityModule {
@ContributesAndroidInjector
abstract ContactsActivity bindContactsActivity();
}
和片段:
import com.some.ContactsPresenter;
import dagger.android.support.DaggerFragment;
public class ContactsFragment extends DaggerFragment {
@Inject
ContactsPresenter mContactsPresenter;
// .....
}
如果您不想使用 DaggerFragment,您可以打开它的实现并复制到您的片段中并进行必要的更改。这里的主要功能是使用 AndroidSupportInjectionModule。希望这对你有所帮助
我正在使用 AndroidInjection.inject(this)
将组件注入 activity。
AndroidInjection
也有一个重载方法,将 android.app.Fragment
作为参数。但是我的片段extend android.support.v4.app.Fragment
并没有对应的方法
问题:如果片段扩展android.support.v4.app.Fragment
如何使用注入?
对于支持库片段,您需要使用支持注入。这里有一些例子:
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class, // Important
ActivityModule.class,
FragmentModule.class
})
public interface AppComponent extends AndroidInjector<App> {
void inject(App app);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
Application,如果需要,可以使用 DaggerApplication 或简单的 HasSomeIjection Multidex implementation:
public class App extends MultiDexApplication implements
HasActivityInjector,
HasFragmentInjector {
@Inject DispatchingAndroidInjector<Activity> activityInjector;
@Inject DispatchingAndroidInjector<Fragment> fragmentInjector;
private AppComponent mComponent;
@Override
public void onCreate() {
mComponent = DaggerAppComponent.builder().application(this).build();
mComponent.inject(this);
}
// Dependency Injection
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return activityInjector;
}
@Override
public DispatchingAndroidInjector<Fragment> fragmentInjector() {
return fragmentInjector;
}
}
下一个模块:
@Module
public abstract class FragmentModule {
@ContributesAndroidInjector
abstract ContactsFragment bindContactsFragment();
}
Activity 模块:
@Module
public abstract class ActivityModule {
@ContributesAndroidInjector
abstract ContactsActivity bindContactsActivity();
}
和片段:
import com.some.ContactsPresenter;
import dagger.android.support.DaggerFragment;
public class ContactsFragment extends DaggerFragment {
@Inject
ContactsPresenter mContactsPresenter;
// .....
}
如果您不想使用 DaggerFragment,您可以打开它的实现并复制到您的片段中并进行必要的更改。这里的主要功能是使用 AndroidSupportInjectionModule。希望这对你有所帮助