Android Dagger2依赖注入

时间:2017-08-11 08:36:58

标签: android dependency-injection dagger-2

我是Dagger2的新手,我试图在我的应用程序中使用依赖注入。 我使用共享首选项并认为使用依赖注入更有帮助,而不是每次我需要使用它时获取共享优先级的实例。 当我在活动和片段上使用它时它工作正常,但是当我尝试在服务或意图服务上使用它时,它不起作用。

这是我的代码:

的AppModule:

@Module
public class AppModule
{
    public final ApplicationClass application;

    public AppModule(ApplicationClass application)
    {
        this.application = application;
    }

    @Provides @Singleton
    Context providesApplicationContext()
    {
        return this.application;
    }

    @Provides @Singleton
    SharedPreferences providesSharedPreferences()
    {
        return application.getSharedPreferences(Constants.FILE_NAME,Context.MODE_PRIVATE);
    }
}

AppComponent

@Singleton @Component(modules = {AppModule.class})
public interface AppComponent
{
    void inject (ApplicationClass applicationClass);
    void inject (IntentService intentService);
    void inject (Service service);
}

ApplicationClass

public class ApplicationClass extends Application
{
    AppComponent appComponent;

    @Override
    public void onCreate()
    {
        super.onCreate();
        Thread.setDefaultUncaughtExceptionHandler(new 
        Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                onUncaughtException(t, e);
            }
        });

        appComponent = DaggerAppComponent
                       .builder()
                       .appModule(new AppModule(this))
                       .build();

        appComponent.inject(this);
    }

    public AppComponent getAppComponent()
    {
        return this.appComponent;
    }

    private void onUncaughtException(Thread t, Throwable e)
    {
        e.printStackTrace();

        Intent crash= new Intent(getApplicationContext(),Crash.class);
        about.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(crash);      
    }
}

所以我尝试在IntentService中注入共享首选项,并使用了这些代码行 在我的服务(intentservice)的onCreate方法中

@Inject
SharedPreferences preferences;

@Override
public void onCreate()
{
    super.onCreate();
    ((ApplicationClass)getApplication()).getAppComponent().inject(this);
}

但问题是当我在onHandleIntent方法中使用此首选项变量时,应用程序崩溃,因为首选项为null。 那为什么它没有注射?

0 个答案:

没有答案