I have a question regarding Android Dagger 2 und the usage of @Inject and @Provide annotations. Given are the following two simplified examples:
They work similarly, and the @Inject style is preferred when you have such an easy choice like in your example. However, this isn't always the case:
B, which consumes A, is not under your control and not DI-aware, you will have no way to add the @Inject annotation.@Provides (or @Binds in newer Dagger versions) to identify which implementation to use.@Inject or not. This might be the case if you want a specific instance or constant as a constructor parameter, but you can't or don't want to set up the binding for the whole object graph.@Provides allows you to effectively create a factory method, with everything that allows. This is a great way to change which instances are included in your graph, or to effectively add to the class's constructor graph-wide if you can't (or shouldn't) change the class itself.
null sometimes that logic can live in a @Provides method. Make sure you annotate the injection sites as @Nullable.@Provides method, particularly if the choice depends on runtime environment.