我正在这样做:
@Module类都属于主项目,它们提供了要注入库元素的实现,因此库项目中没有@Module类
期望依赖关系的库元素必须有权访问 ObjectGraph 并在自身上调用 .inject(),但主项目应将 ObjectGraph 实例提供给具有@Module依赖关系的库
-
如何将 ObjectGraph 从主项目导入到库中?你可以有这样的界面:
interface Injector {
void inject(Object object);
public ObjectGraph getObjectGraph();
}
上下文对象(如 Activity 或 Application 类)实现此接口(ObjectGraph 对象的持有者)。
如果你在库模块中有 Activity 的例子,它需要从主项目中注入一些东西,这将看起来像这样:
class LibraryActivity extends Activity {
@Inject ActivationModule instance;
void onCreate(... ) {
Injector injector = (Injector)getApplicationContext();
injector.inject(this)
}
}
ActivationModule 是库项目中的类/接口。
主项目具有应用程序类,它实现注入器接口并创建对象图,并在库项目中为激活模块提供了依赖性。
class MyApplicationInTheMainProject extends Application implements Injector {
ObjectGraph graph;
@Override
public void onCreate() {
super.onCreate();
graph = ObjectGraph.create(new ActivationModuleImpl(this));
}
@Override public void inject(Object object) {
graph.inject(object);
}
@Override public ObjectGraph getObjectGraph() {
return graph;
}
}
@Module(injects = {
LibraryActivity.class
}, library = true)
class ActivationModuleImpl implements ActivationModule {
....
}