Я новичок в Dagger, и я наткнулся на альтернативу @Provides в каком-то проекте Dagger, и это заставило меня задуматься, есть ли какая-либо реальная разница между этими двумя методами.
Общий код:
class DependencyOne {
@Inject DependencyOne();
}
class DependencyTwo {
@Inject DependencyTwo();
}
Подход 1:
class MyClass {
Resource r;
@Inject MyClass(DependencyOne d1, DependencyTwo d2) {
r = Resource.builder().addDependencies(d1,d2).build();
}
Resource getResource() {
return r;
}
}
@Component interface MyComponent {
MyClass getMyClass();
}
// Get the resource using
DaggerMyComponent.create().getMyClass().getResource();
Подход 2:
@Module class MyModule {
@Provides static Resource getResource(DependencyOne d1, DependencyTwo d2) {
return Resource.builder().addDependencies(d1,d2).build();
}
}
@Component(modules={MyModule.class})
interface MyComponent {
Resource getResource();
}
// Get the resource using
DaggerMyComponent.create().getResource();
Теперь я знаю, что, вероятно, слишком много думаю об этом, но есть ли какая-то реальная разница между двумя подходами, производительность или иначе? Один из них предпочтительнее другого?