实际上我是依赖注射和匕首的新手,我一直在写锅炉板代码而且我正在努力学习匕首
我有一个保存偏好值的全局类
@Module(injects = AppPrefes.class)
public class AppPrefes {
private SharedPreferences appSharedPrefs;
private Editor prefsEditor;
public AppPrefes(Context context, String Preferncename) {
this.appSharedPrefs = context.getSharedPreferences(Preferncename,
Activity.MODE_PRIVATE);
this.prefsEditor = appSharedPrefs.edit();
}
/****
*
* getdata() get the value from the preference
*
* */
@Provides
public String getData(String key) {
return appSharedPrefs.getString(key, "");
}
/****
*
* SaveData() save the value to the preference
*
* */
@Provides
public void SaveData(String Tag, String text) {
prefsEditor.putString(Tag, text);
prefsEditor.commit();
}
}
我怎么可能在My活动中注入这个课程 在我的活动oncreate中我已经像这样放了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ObjectGraph objectGraph = ObjectGraph.create();
AppPrefes app = objectGraph.get(AppPrefes.class);
}
但是我应该如何将依赖关系,即上下文和首选项名称传递给AppPrefes类,我对依赖注入是全新的,如果我错了请纠正我 因为匕首文档对我来说似乎有点难以提出这个问题。
答案 0 :(得分:0)
我相信如果您愿意承担创建静态变量来存储应用程序实例的风险,
public enum ApplicationHolder
{
INSTANCE;
private MyApplication application;
public MyApplication getApplication()
{
return application;
}
public void setApplication(MyApplication application)
{
this.application = application;
}
}
public MyApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();
ApplicationHolder.INSTANCE.setApplication(this);
objectGraph.create(new RootModule());
}
}
之后,您可以创建一个Dagger模块,该模块可以提供Application实例的Context。
@Module(complete = false, library = true)
public class ContextModule
{
@Provides
public Context providesContext()
{
return ApplicationHolder.INSTANCE.getApplication().getApplicationContext();
}
}
@Module(
includes =
{
ContextModule.class
},
injects =
{
AppPrefes.class
}
)
public class RootModule
{
}
然后,您可以使用@Inject
在活动中注入此内容,但是您需要提供要作为构造函数参数注入的String
,如下所示:https://stackoverflow.com/a/18105271/2413303
我的模块和内容的结构就像这里:How to set up DAGGER dependency injection from scratch in Android project?