Вот мой код, основанный на каком-то старом учебнике, найденном в Интернете. На основном сайте 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();
}
}