Kam*_*ili 12 android dagger dagger-2
我试图在Dagger2中做SubScoping.但是,我无法弄清楚这个编译错误: - > ...MyApplicationModule must be set发生在我的LogInFragment.如果有人试图对这个错误有所了解.我真的很高兴.
这是MyApplication类:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MyInjector.initialize(this);
}
}
Run Code Online (Sandbox Code Playgroud)
这是MyInjector类:
public enum MyInjector {
INSTANCE;
MyApplicationComponent myApplicationComponent;
private MyInjector() {
}
public static void initialize(MyApplication myApplication) {
MyApplicationComponent myApplicationComponent = DaggerMyApplicationComponent.builder()
.myApplicationModule(new MyApplicationModule(myApplication))
.build();
INSTANCE.myApplicationComponent = myApplicationComponent;
}
public static MyApplicationComponent get() {
return INSTANCE.myApplicationComponent;
}
}
Run Code Online (Sandbox Code Playgroud)
这是MyApplicationComponent类:
@Component (modules = {MyApplicationModule.class})
public interface MyApplicationComponent {
}
Run Code Online (Sandbox Code Playgroud)
这是MyApplicationModule类
@Module
public class MyApplicationModule {
private final MyApplication myApplication;
public MyApplicationModule(MyApplication myApplication) {
this.myApplication = myApplication;
}
@Singleton
@Provides
SharedPreferences providesSharedPreferences(Context context) {
return context.getSharedPreferences("My_Pref", Context.MODE_PRIVATE);
}
@Singleton
@Provides
public Context providesMyApplicationContext() {
return this.myApplication.getApplicationContext();
}
@Singleton
@Provides
public LocationManager providesLocationService(Context context) {
return (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}
@Singleton
@Provides
public MyDatabaseManager providesMyDatabaseManager(Context context) {
return MyDatabaseManager.getInstance(context);
}
@Singleton
@Provides
public AccountSystemModel providesAccountSystemModel(Context context) {
return MyDatabaseManager.getInstance(context);
}
@Singleton
@Provides
public MyApplication providesMyApplication(){
return this.myApplication;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试Subcope的地方
这是MyLogIn组件类
@Singleton
@Component(modules = {MyApplicationModule.class}, dependencies = {MyApplicationComponent.class})
public interface LogInComponent {
LogInPresenter signInPresenter();
}
Run Code Online (Sandbox Code Playgroud)
这就是Compilation Error发生的地方
这是MyLogInActivityFragment
@Override protected void injectDependencies() {
logInComponent = DaggerLogInComponent.builder()
.myApplicationComponent(MyInjector.get())
.build();
}
Run Code Online (Sandbox Code Playgroud)
dgn*_*can 26
该错误可能是由abstract class模块引起的.Dagger如果是抽象类,则不能使用模块.
你LogInComponent取决于MyApplicationComponent哪个包含MyApplicationModule.您也不应该同时声明这个模块LogInComponent.删除它,它将编译.
此外,请确保你揭露你在需要依赖LogInComponent从MyApplicationComponent将它们添加到像这样的组件接口:
@Component (modules = {MyApplicationModule.class})
public interface MyApplicationComponent {
Context context();
SharedPreferences sharedPreferences();
// ...
}
Run Code Online (Sandbox Code Playgroud)
另一个提示 - 如果您需要所有依赖项,MyApplicationComponent您可能需要阅读有关子组件的内容.
| 归档时间: |
|
| 查看次数: |
5728 次 |
| 最近记录: |