Использование кинжала Обеспечивает создание собственного класса - PullRequest
0 голосов
/ 08 апреля 2020

Я новичок в 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();

Теперь я знаю, что, вероятно, слишком много думаю об этом, но есть ли какая-то реальная разница между двумя подходами, производительность или иначе? Один из них предпочтительнее другого?

1 Ответ

0 голосов
/ 10 апреля 2020

@Provides методы и внедрение в конструктор - лучшая практика для Dagger 2. Вызов компонента и прямой запрос отдельных зависимостей, таких как Resource, возможно, будет минимизирован.

Скажем, у вас есть класс, который Вы хотите иметь возможность использовать Resource. Вы пишете метод @Provides для Resource. Затем вы можете написать такой класс:

@Inject
class ResourceConsumer {

    private final Resource resource;

    @Inject
    ResourceConsumer(Resource resource) {
        this.resource = resource;
    }
}  

Поскольку Dagger 2 знает, как предоставить Resource, он будет знать, как предоставить ResourceConsumer. Затем вы можете ввести свой ResourceConsumer куда хотите.

...