类中的Dagger2注入可扩展抽象Activity,并具有可扩展库中的Application的Application

时间:2019-01-27 18:40:15

标签: android dagger-2

我有一个库,该库具有在项目模块中扩展的抽象BaseActivity和BaseApplication。库模块中存在ApplicationModule和ApplicationComponent,当我尝试将对象扩展到扩展BaseActivity的MainActivity时,出现空指针异常。

这在库模块中

@Component(modules = ApplicationModule.class)
@Singleton
public interface ApplicationComponent {

    void inject(BaseActivity baseActivity);

    @Component.Builder
    interface Builder {

        @BindsInstance
        Builder application(Application application);

        ApplicationComponent build();

    }
}

也在库模块中

@Module
public class ApplicationModule {

    @Singleton
    @Provides
    User provideUser() {
        return  new User("Unknown","abc@xyz.com");
    }
}

图书馆申请

public abstract class BaseApplication extends Application {

    private ApplicationComponent mApplicationComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        mApplicationComponent = DaggerApplicationComponent
                .builder()
                .application(this)
                .build();
    }

    public ApplicationComponent getApplicationComponent() {
        return mApplicationComponent;
    }
}


public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((BaseApplication) getApplication()).getApplicationComponent().inject(this);


}

项目活动

public class MainActivity extends BaseActivity {

    @Inject
    User user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        user.setName("New User");
        System.out.println("MainActivity user: " + user.getName() + ", email: " + user.getEmail());

    }
}

当我尝试将其注入扩展BaseActivity的MainActivity时,用户返回null。当我将用户注入BaseActivity时,效果很好。

0 个答案:

没有答案