在Android上使用Dagger2进行依赖注入

时间:2015-05-15 14:42:27

标签: java android dagger-2

目前我不是依赖注入的粉丝,但我想尝试一下。

这就是我所拥有的:

import android.os.Bundle;
import com.facebook.CallbackManager;
import rx.android.app.RxActivity;

public class ActivityMain2 extends RxActivity {

    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        callbackManager = CallbackManager.Factory.create();
    }
}

现在我想注入Facebook的CallbackManager。好的,让我们开始。

我创建了很多新课......真的吗?我必须编写更多代码才能让我的开发人员生活更轻松? : - (

import com.facebook.CallbackManager;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;

@Module
public class FacebookModule {

    @Provides
    @Singleton
    CallbackManager provideCallbackManager() {

        return CallbackManager.Factory.create();
    }
}
import com.facebook.CallbackManager;
import javax.inject.Singleton;
import dagger.Component;

@Singleton
@Component(modules = {FacebookModule.class})
public interface FacebookComponent {

    CallbackManager provideCallbackManager();
}

使用这个新类我将Activity更改为:

import android.os.Bundle;
import com.facebook.CallbackManager;
import javax.inject.Inject;
import rx.android.app.RxActivity;

public class ActivityMain2 extends RxActivity {

    @Inject
    CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initializeDependencyInjector();
    }

    private void initializeDependencyInjector() {

        DaggerFacebookComponent.builder()
                .facebookModule(new FacebookModule())
                .build();
    }
}

但它不起作用。 callbackManager始终为空。

这有什么问题?

1 个答案:

答案 0 :(得分:2)

像这样编辑你的FacebookComponent:

import com.facebook.CallbackManager;
import javax.inject.Singleton;
import dagger.Component;

@Singleton
@Component(modules = {FacebookModule.class})
public interface FacebookComponent {

public void inject(ActivityMain2 activity);
}

然后是你的initializeDependencyInjector方法:

private void initializeDependencyInjector() {

    DaggerFacebookComponent.builder()
            .facebookModule(new FacebookModule())
            .build().inject(this);
}