一个基本的AppComponent依赖于单个AppModule提供应用程序范围的单例对象。
@Singleton @Component(modules = AppModule.class) public interface AppComponent { void inject(App app); Context provideContext(); Gson provideGson(); }
与 一起使用的模块AppComponent,它将提供其单例对象,例如Gson在整个应用程序中重用的实例。
@Module public class AppModule { private final Application mApplication; public AppModule(Application application) { mApplication = application; } @Singleton @Provides Gson provideGson() { return new Gson(); } @Singleton @Provides Context provideContext() { return mApplication; } }
用于设置匕首和单例组件的子类应用程序。
public class App extends Application { @Inject AppComponent mAppComponent; @Override public void onCreate() { super.onCreate(); DaggerAppComponent.builder().appModule(new AppModule(this)).build().inject(this); } public AppComponent getAppComponent() { return mAppComponent; } }
现在是一个活动范围的组件,它依赖于AppComponent获取对单例对象的访问权限。
@ActivityScope @Component(dependencies = AppComponent.class, modules = ActivityModule.class) public interface MainActivityComponent { void inject(MainActivity activity); }
和一个可重用的ActivityModule,将提供基本的依赖,如FragmentManager
@Module public class ActivityModule { private final AppCompatActivity mActivity; public ActivityModule(AppCompatActivity activity) { mActivity = activity; } @ActivityScope public AppCompatActivity provideActivity() { return mActivity; } @ActivityScope public FragmentManager provideFragmentManager(AppCompatActivity activity) { return activity.getSupportFragmentManager(); } }
把所有东西放在一起,我们已经设置好了,可以注入我们的活动,并确保在Gson整个应用程序中使用相同的内容!
public class MainActivity extends AppCompatActivity { @Inject Gson mGson; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DaggerMainActivityComponent.builder() .appComponent(((App)getApplication()).getAppComponent()) .activityModule(new ActivityModule(this)) .build().inject(this); } }