首页 > 解决方案 > 这真的是用匕首 2 注入东西的最佳形式吗?或者为什么匕首是一个不错的选择?

问题描述

我正在尝试使用 Dagger 2,在很多示例中我看到了这样的代码:

我的组件.java

@Singleton
@Component(modules = {SharedPrefModule.class})
public interface MyComponent {
    void inject(MainActivity activity);
}

SharedPrefModule.java

@Module
public class SharedPrefModule {
    private Context context;

    public SharedPrefModule(Context context) {
        this.context = context;
    }

    @Singleton
    @Provides
    public Context provideContext() {
        return context;
    }

    @Singleton
    @Provides
    public SharedPreferences provideSharedPreferences(Context context) {
        return PreferenceManager.getDefaultSharedPreferences(context);
    }
}

MainActivity.java

 @Inject
    SharedPreferences sharedPreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();
        myComponent = DaggerMyComponent.builder().sharedPrefModule(new SharedPrefModule(this)).build();
        myComponent.inject(this);


    }

我的疑问是如果我真的要注入,我需要放这个吗?:

DaggerMyComponent.builder().sharedPrefModule(new SharedPrefModule(this)).build();

如果我想在其他类中注入,我是否需要在 中放置另一个方法,MyComponent例如,我想注入Do I need to put too?SharedPreferencesMainViewModelvoid inject(MainViewModel mainViewModel);

如果答案是肯定的,那么这样做的真正优势是什么?仅应用单例模式有什么区别?还是直接注射使用myComponent = new SharedPreferences(this);

标签: androiddependency-injectiondagger-2android-mvvmandroidinjector

解决方案


推荐阅读