【发布时间】:2015-08-28 17:28:09
【问题描述】:
这是我的代码,它基于互联网上的一些旧教程。 Dagger 2的主站点上应该有一些例子,我发现如何实现这一切真的很难理解。
要运行这么简单的应用程序确实需要大量工作。我有两个问题:
我是否必须在每个类中调用 DaggerLoggerComponent 我想获得一些组件,比如我的 Logger 类?
另外,我怎样才能使 Logger 类的范围成为单例?现在每个按钮单击都会创建一个新的记录器实例。
可能我不了解一些底层概念,我之前只在 Spring 中使用过依赖注入,这一切对我来说似乎很奇怪。
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoggerComponent component = DaggerLoggerComponent.builder().loggerModule(new LoggerModule()).build();
component.getLogger().log("Hello!",MainActivity.this);
}
});
}
}
public class Logger {
private static int i = 0;
public Logger(){
i++;
}
public static int getI() {
return i;
}
public void log(String text, Context context){
Toast.makeText(context,text+" "+i,Toast.LENGTH_SHORT).show();
}
}
@Singleton
@Component(modules={LoggerModule.class})
public interface LoggerComponent {
Logger getLogger();
}
@Module
public class LoggerModule {
@Provides
@Singleton
Logger provideLogger(){
return new Logger();
}
}
【问题讨论】:
标签: android dependency-injection dagger-2