我有一些时间用Dagger测试一些东西,在监督了这里的一系列文章之后:http://antonioleiva.com/dependency-injection-android-dagger-part-1/,回过头来获取更多信息,我看到了一些很好的例子:https://github.com/adennie/fb-android-dagger,其中大部分都集中在关于注入Activity
,Fragment
,Service
和相关的依赖关系。我想和RoboGuice做类似的事情。
在RoboGuice中
public class Utils {
@InjectResource(R.string.hello_world) private String hello;
public void showLog(){
System.out.println("String from injected resource : " + hello);
}
}
在Dagger
public class Utils {
@Inject
Resources mResource;
public void showLog() {
System.out.println( "String from injected resource : " + this.mResource.getString( R.string.hello_world ) );
}
}
我在我的应用程序中创建了一个模块:
@Module( injects = {Utils.class }, complete = false, library = true )
public class ResourceModule {
Context mContext;
public ResourceModule ( final Context mContext ) {
this.mContext = mContext;
}
@Provides
@Singleton
Resources provideResources() {
return this.mContext.getResources();
}
}
在我的活动中试过这个
Utils mUtils = new Utils();
mUtils.showLog();
但我得到了NullPointerException
。有人已经做过类似的事吗?
答案 0 :(得分:2)
您必须使用inject
方法注入对象。
假设您ObjectGraph
类中的App
已初始化,Application
类是inject
的子类,并公开了公共public void inject(Object object) {
mObjectGraph.inject(object);
}
方法,其实现如下:
Utils
创建Utils mUtils = new Utils();
((App) getApplication).inject(mUtils);
mUtils.showLog();
实例后,必须注入其依赖项。
ObjectGraph
修改强>
您还可以使用构造函数注入(无需将对象传递给public class Utils {
private final Resources mResource;
@Inject
public Utils(Resources resources) {
mResources = resources;
}
public void showLog() {
System.out.println( "String from injected resource : " + this.mResource.getString( R.string.hello_world ) );
}
}
)
ObjectGraph
使用构造函数注入时,必须由Utils mUtils = mObjectGraph.get(Utils.class);
{{1}}