我刚开始使用 dagger 并遇到了单例对象的一些问题。
所以单例看起来像这样:-
@Module(
injects = {MainActivity.class,SecondActivity.class}
)
public class MySingle {
//just to count the number of instances of the class
public static int thecount=0;
//the constructor
public MySingle(){
Log.v("testing","created");
thecount++;
}
@Singleton
@Provides
public MySingle getSingle(){
return new MySingle();
}
}
创建对象图的应用程序类:-
public class MyApplication extends Application {
private ObjectGraph objectGraph;
@Override
public void onCreate(){
super.onCreate();
objectGraph=ObjectGraph.create(new MySingle());
}
public ObjectGraph getObjectGraph(){
return objectGraph;
}
}
MainActivity.class:-
public class MainActivity extends ActionBarActivity {
@Inject MySingle mysingle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// MyApplication app=(MyApplication)getApplication();
// app.getObjectGraph().inject(this);
Log.v("testing", mysingle.thecount + " mainact");
}
}
因此,每当我运行此程序时,单例“MySingle”的实例数为 1 ,这很好。但是,当我取消注释这些行时:-
MyApplication app=(MyApplication)getApplication();
app.getObjectGraph().inject(this);
我得到的实例数为 2。我从这里了解到 Dagger 为每个对象图创建一个单例,但是根据我使用上述 2 行的理解,我将 MainActivity.class 注入现有的对象图中,显然是使用到目前为止,这对我来说并不明显..我只是在试验它。