Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Square/Dagger, Google/Dagger
Daichi Furiya (Wasabeef)
September 24, 2014
Programming
1
1.2k
Square/Dagger, Google/Dagger
Daichi Furiya (Wasabeef)
September 24, 2014
Tweet
Share
More Decks by Daichi Furiya (Wasabeef)
See All by Daichi Furiya (Wasabeef)
wasabeef
1
570
wasabeef
28
7.6k
wasabeef
0
120
wasabeef
2
770
wasabeef
16
12k
wasabeef
4
1.2k
wasabeef
1
350
wasabeef
5
900
wasabeef
6
4.9k
Other Decks in Programming
See All in Programming
saki4869
0
190
nanimonodemonai
2
1.4k
yumcyawiz
4
650
kenmaz
1
100
chichou
1
850
line_developers_tw
0
540
akatsukinewgrad
0
210
taoshotaro
1
370
jun0
3
660
nauleyco
0
210
rshindo
2
300
akkeylab
0
360
Featured
See All Featured
jeffersonlam
328
15k
lauravandoore
11
1.3k
dougneiner
55
5.4k
holman
288
130k
wjessup
338
16k
jensimmons
207
10k
smashingmag
229
18k
sachag
267
17k
malarkey
119
16k
qrush
285
18k
tanoku
86
8.5k
frogandcode
127
20k
Transcript
Android Square/Dagger potatotips #9 CyberAgent, Inc. ߱ େ
About Me Wasabeef (D.Furiya) @wasabeef_jp wasabeef http://wasabeef.jp
Dagger (ObjectGraph) ɾίϯύΠϧ࣌ݕূɿϞδϡʔϧͱೖΛݕূ͢Δ ɹΞϊςʔγϣϯϓϩηοα ! ɾ࣮ߦ࣌ʹɺϦϑϨΫγϣϯΛར༻͠ͳ͍ ! ɾϝϞϦͷӨڹۃΘ͔ͣʹ͢Δ ! ɾViewͷInjectग़དྷͳ͍
Dagger ͷߏཁૉ
@Module + @Provides ґଘؔΛఏڙ͢ΔͨΊͷΈɾઃఆ
ObjectGraph ґଘؔཧͱΠϯδΣΫλ
@Inject ґଘؔΛཁٻ͢ΔͨΊͷΈ
@Module + @Provides ͷఆٛ
! public class ApiModule { ! public RestAdapter provideRestAdapter(OkHttpClient client)
{ return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! ! public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
@Module( injects = ExampleActivity.java ) public class ApiModule { !
public RestAdapter provideRestAdapter(OkHttpClient client) { return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! ! public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
@Module( injects = ExampleActivity.java ) public class ApiModule { @Provides
public RestAdapter provideRestAdapter(OkHttpClient client) { return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! @Provides public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
@Module( injects = ExampleActivity.java ) public class ApiModule { @Provides
@Singleton public RestAdapter provideRestAdapter(OkHttpClient client) { return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! @Provides @Singleton public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
ObjectGraph + @Inject ͷఆٛ
public class ExampleActivity extends Activity { ! ! RestAdapter mRestAdapter;
! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mRestAdapter = new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(new OkHttpClient())) .build(); } }
public class ExampleActivity extends Activity { private ObjectGraph mObjectGraph; !
RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mRestAdapter = new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(new OkHttpClient())) .build(); } }
public class ExampleActivity extends Activity { private ObjectGraph mObjectGraph; !
RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mObjectGraph = ObjectGraph.create(new ApiModule()); mObjectGraph.inject(this); ! ! } }
public class ExampleActivity extends Activity { private ObjectGraph mObjectGraph; !
@Inject RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mObjectGraph = ObjectGraph.create(new ApiModule()); mObjectGraph.inject(this); ! ! } }
ObjectGraph.plus
public class SignUpActivity extends Activity { private ObjectGraph mObjectGraph; !
@Inject RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! ExampleApp app = (ExampleApp) getApplication(); mObjectGraph = app.getObjectGraph(); mObjectGraph.plus(new SignUpModule()); mObjectGraph.inject(this); } }
Google/Dagger
Square/Daggerͱͷҧ͍ ɾτϨʔαϏϦςΟ “Open Declaration”“Find usages”ͳͲͰɺݺͼग़͠ݩͷτϨʔε͕ग़དྷΔ ! ɾ໌֬ͳAPI “@Module”ΛΘ͔Γ͘͢͠ɺ”@Component”, “@Subcomponent”ͷՃ !
ɾύϑΥʔϚϯε্ ReflectionΘͳ͍ ࣗಈੜ͞ΕΔίʔυΛखॻ͖ͷΑ͏ʹͳίʔυ࣭ʹ͚ۙͮΔ
Google/Dagger ! ։ൃதͳͷͰ ػೳFix͏গ͔͔͠Γͦ͏ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠