Slides for our (John Rodriguez and myself) talk at Droidcon SF: http://sf.droidcon.com/schedule
For the past 3 years, Square Register Android has leveraged Dagger † to wire up Java objects. However, the app scope hierarchy and complexity increased and we started having bugs and crashes related to scoping errors. This talk will show how to structure an app around Dagger2 ‡ and present a strategy for incrementally migrating from Dagger1 to Dagger2.
18. @Module class AndroidModule {…}
@Module class HttpModule {…}
@Module class ApiModule {…}
@Module class LoggedInModule {…}
@Module class PaymentModule {…}
@Module class TransactionLedgerModule {…}
…
108. @Singleton public class TransactionHandler {...}
@Module(injects = TransactionFlow.class)
public class TransactionModule {}
109. @Singleton public class TransactionHandler {...}
@Module(injects = TransactionFlow.class)
public class TransactionModule {}
@Scope public @interface SingleInTransaction {}
110. @SingleInTransaction public class TransactionHandler {...}
@Module(injects = TransactionFlow.class)
public class TransactionModule {}
@Scope public @interface SingleInTransaction {}
111. @SingleInTransaction public class TransactionHandler {...}
@Module(injects = TransactionFlow.class)
public class TransactionModule {}
@Scope public @interface SingleInTransaction {}
@Component
interface TransactionComponent {
}
112. @SingleInTransaction public class TransactionHandler {...}
@Module(injects = TransactionFlow.class)
public class TransactionModule {}
@Scope public @interface SingleInTransaction {}
@SingleInTransaction
@Component
interface TransactionComponent {
}
113. @SingleInTransaction public class TransactionHandler {...}
@Module(injects = TransactionFlow.class)
public class TransactionModule {}
@Scope public @interface SingleInTransaction {}
@SingleInTransaction
@Component(modules = TransactionModule.class)
interface TransactionComponent {
}
114. @SingleInTransaction public class TransactionHandler {...}
@Module
public class TransactionModule {}
@Scope public @interface SingleInTransaction {}
@SingleInTransaction
@Component(modules = TransactionModule.class)
interface TransactionComponent {
TransactionFlow transactionFlow();
}
115. @SingleInTransaction public class TransactionHandler {...}
@Module
public class TransactionModule {}
@Scope public @interface SingleInTransaction {}
@SingleInTransaction
@Component(modules = TransactionModule.class)
interface TransactionComponent {
TransactionFlow transactionFlow();
}
116. @SingleInTransaction public class TransactionHandler {...}
@Module
public class TransactionModule {}
@Scope public @interface SingleIn { Class<?> value(); }
@SingleInTransaction
@Component(modules = TransactionModule.class)
interface TransactionComponent {
TransactionFlow transactionFlow();
}
117. @SingleIn(TransactionComponent.class) public class TransactionHandler {...}
@Module
public class TransactionModule {}
@Scope public @interface SingleIn { Class<?> value(); }
@SingleInTransaction
@Component(modules = TransactionModule.class)
interface TransactionComponent {
TransactionFlow transactionFlow();
}
118. @SingleIn(TransactionComponent.class) public class TransactionHandler {...}
@Module
public class TransactionModule {}
@Scope public @interface SingleIn { Class<?> value(); }
@SingleIn(TransactionComponent.class)
@Component(modules = TransactionModule.class)
interface TransactionComponent {
TransactionFlow transactionFlow();
}