Dagger2 注入一切?

Dagger2 inject everything?

我正在阅读有关 Dagger2 的文档。问题是我很清楚如何使用 this

注入 class Context

但我怀疑以下 class 例如:

public class SocialControler{

private ImageView twitterLogo;
private ImageView googleLogo;

public SocialControler(ImageView twitter, ImageView google){
twitterLogo = twitter;
googleLogo = google;
}
//Getters and Setters

}

所以在我的 MainActivity 我会有这样的东西

SocialControler mSocial = new SocialControler(mTwitterLogo, mGoogleLogo);

我是否应该使用 @Inject 注释而不是 new 来注入这个 class,这样我们的 Activity 上就不再有 new 了?如果是如何?

我卡在 @Mudule 了。我如何在 de Module ?

中提供视图
@Module
public class AppModuleSocialMediaManager {


    @Provides
    public MainActivity provideActivity(){
        return new MainActivity();
    }

    @Provides
    public SocialMediaClickManager provideMediaManager(MainActivity mainActivity, View twitterLogo, View googleLogo) {
        return new SocialMediaClickManager(mainActivity);
    }

    @Provides
    public View provideTwitter(){
        return ?
    //from here how I can provide a View
    }
}

我不会推荐您用于构建应用程序的架构,即让您的控制器依赖于确切的视图,但如果您对此没有意见,那么您可以像这样实现您的模块:

 @Module
 public class AppModuleSocialMediaManager {
     private final MainActivity mainActivity;

     public AppModuleSocialMediaManager(MainActivity mainActivity) {
         this.mainActivity = mainActivity;
     }

     @Provides
     @Named("twitter_view")
     View provideTwitterView() {
         return mainActivity.findViewById(..);
     }

     @Provides
     @Named("google_view")
     View provideGoogleView() {
         return mainActivity.findViewById(..);
     }

     @Provides
     SocialController provideSocialController(@Named("twitter_view") View twitterView, @Named("google_view") View googleView) {
         return new SocialController(twitterView, googleView);
     }

 }

然后你需要声明另一个组件。假设它是 MainActivityComponent:

 @Component(modules = AppModuleSocialMediaManager.class)
 public interface MainActivityComponent {
     void inject(MainActivity activity);
 }

之后,在您的 activity 中,您可以执行如下操作:

 public class MainActivity extends Activity {
     @Inject
     SocialController socialController;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         DaggerMainActivityComponent.Builder()
             .appModuleSocialMediaManager(new AppModuleSocialMediaManager(this))
             .build()
             .inject(this);

         socialController.doSomething();
     }

 }