1

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

这就是我所拥有的:

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始终为空。

这有什么问题?

4

1 回答 1

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);
}
于 2015-05-15T16:07:59.007 回答