2015-05-15 3 views
1

В настоящее время я не являюсь поклонником инъекции зависимостей, но я хочу дать им попробовать.Зависимость инъекции с Dagger2 на Android

Это то, что у меня есть:

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(); 
    } 
} 

Теперь я хочу, чтобы ввести CallbackManager Facebook. Ладно, давай начнем.

Я создал много новых классов ... действительно? Мне нужно написать гораздо больше кода, чтобы упростить мою жизнь разработчика? :-(

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(); 
} 

С этим новым классам я изменил активность к этому:

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 всегда нулевой

Что случилось с.. это?

ответ

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); 
}