ログイン読み込んでいます…
When creating a new dynamic feature module using Android Studio, the IDE includes most of the manifest attributes that… 依存関係メインModuleが各Feature moduleに依存してるのではなく、各Feature moduleがメインModuleに依存している形になります。 Feature moduleの build.gradle には、次のように書くことになります。 dependencies { // メイン(app)moduleに依存 implementation project(':app') }なので、メインModuleからはFeature moduleのクラスを直接参照することが出来ません。 画面遷移依存関係が原因で、直接Feature moduleのAc
Activity、Fragment、Viewにコンストラクタインジェクションする Created at Fri, Nov 16, 2018 Daggerライブラリを使い、Androidフレームワークが提供するActivityなどのクラスにコンストラクタインジェクションしたい、 そんな夢をみたAndroidエンジニアは数多くいると思います。 この記事ではそんな夢を叶える方法を紹介します。 サンプルコードはここにあります。 FragmentFactory Fragmentに依存関係を注入する時、普通にやると以下のコードになると思います。 class MainFragment : Fragment() { @Inject lateinit var userHandler: UserHandler ... }
作成者: Shadi Namrouti および Rick Anderson ASP.NET Core の MVC コントローラーは、コンストラクターを使用して明示的に依存関係を要求します。 ASP.NET Core には、依存関係の挿入 (DI) の組み込みのサポートがあります。 DI を利用すれば、アプリのテストと保守管理が簡単になります。 サンプル コードを表示またはダウンロードします (ダウンロード方法)。 コンストラクターの挿入 サービスはコンストラクター パラメーターとして追加されます。ランタイムによって、サービス コンテナーからサービスが解決されます。 サービスは通常、インターフェイスを利用して定義されます。 たとえば、現在の時刻を必要とするアプリについて考えてください。 次のインターフェイスは IDateTime サービスを公開します。 public interface ID
きっかけ Dagger2はAndroid Developersの Guide to App Architecture でも紹介されており そろそろAndroidエンジニアでDagger2やDIがわからないのはまずそうな気がしてきたので、調べてみました。 よく分からないところは対応する【補足メモ】を読んでみてください。ソースコードを載せているので、イメージしやすいかもしれません。 最近アップデートがあったAndroidとの関連(dagger.android)までは今回は触れることができていません。 Dagger初心者の自分が驚いたところを太字にしておきます。 ほぼ以下のドキュメントの意訳です。間違っているところはご指摘下さい。 User's Guide https://google.github.io/dagger/users-guide.html User's Guide Dagger2概
はじめに 2017年に入ってDagger2もバージョン2.9を迎えました. Androidでも使われることが多いDIフレームワークも, バージョンを重ねるごとに便利なAPIが増えています. 本稿はAndroidアプリを例に, Activityに依存するComponentからインジェクションする方法について, 過去のAPIを使用した方法と, 新しいAPIを使用した方法とで比較を行い, より綺麗なインジェクションを実現していきます. 今回紹介する内容+αとソースコードはGitHubにもアップしていますのでそちらもあわせてご覧ください :) Subcomponent. 親と子の密結合問題 Androidでは, コンポーネントをアクティビティの単位で分割することがよくあります(e.g. MainActivityComponent, SettingActivityComponent, etc.) そ
DIコンテナを使う時にどのインジェクションを使うかって話です。 たぶん誰かがどこかで同じようなことを書いているだろうけれど、気にせず書くよ。 「他の誰かが書いている」なんてのを書かない理由にしてると何も書けなくなるし。 コンテナ DIコンテナのこと。 コンテナ管理 インスタンスのライフサイクルをコンテナが管理していること。雑に言えば、使う側で new しないってこと。 インジェクション Dependency Injectionのこと。 Short Answer コンストラクタインジェクションを使いましょう。使い分けなくていいです。 3種類のインジェクション インジェクションには3種類ありますね。他あっても知らない。 フィールドインジェクション セッターインジェクション コンストラクタインジェクション フィールドインジェクション 一番よく見るかな。 class Hoge { @Inject
このpostについて Dagger2には @Singleton を始めとした "scope" というものがあります 下記に1つでも該当する人 (= この前までの自分) は読んでもらえると良いかもです - Dagger2はActivity lifecycleを克服するために有用な手段だと思ってる - @Singleton は、いわゆる getInstance() を用いたstaticなシングルトンを実現するためのアノテーションだと思ってる - Daggerのscopeは、インスタンスのlifecycleをよしなにゴニョゴニョしてくれるmagicであると思ってる Scopeって何なんだろう 例を交えて考えてみます MyViewModel というクラスのinstanceをinjectionするケースを考えます "injectする度にinstanceを生成したくない & 一度作ったものを使いまわし
この記事では Dagger 2.10 RC4 を使っています。 短い概要 Dagger 2.10 で Android のための拡張モジュールが公開されました 拡張モジュールを使うとコンポーネントの取り回しがシンプルになります BaseActivity や BaseFragment を使わずに済みます シンプルにはなりますが、準備の手間はかなり増えます とりあえず動作するところまで試したため、ベストプラクティスかは不明です はじめに Dagger は Square が開発した DI ライブラリですが、 Dagger 2 は Google がフォークしたバージョンです。公式に Dagger は Deprecated になっており、 Dagger 2 への移行ガイドが Google から公開されています。 DroidKaigi カンファレンスアプリでも Dagger 2 は使われており、セッショ
Re.Ra.Ku アドベントカレンダー 4日目です。 こんにちは、安部です。Androidアプリを担当しています。初投稿です。 今回はおそらくAndoidアプリ開発者は常に頭を悩ませる問題である、設計の話です。私もずっと試行錯誤を繰り返し、現在進行系で悩んでる問題でもあります。少し見えてきた部分があるので現在の状況を共有したいと思います。 抱えてる問題 Androidアプリ開発していくうえで、よくぶつかる壁です。 ライフサイクル Androidのライフサイクルは複雑でViewの状態をどのように管理すればよいのか難しいです。今はActivityだけではなくFragmentもあるので、更に複雑にしていると思います。 また、画面の回転などの対応を考えたりすると更に大変です。 非同期処理 通信は非同期にしなければいけません。そのためUI側もそれを意識しなければいけなくなり、Viewの状態管理も複雑
去年、DroidKaigi2016の公式アプリをオープンソースで作りましたが、2017もコードを公開しました。 github.com コードだけではわかりにくいところを少し補足しておきます。 2016とは別アプリ 2016とはリポジトリもパッケージも違います。別アプリです。 なぜ去年のリポジトリを引き継がなかったかというと、個人のリポジトリではなくDroidKaigiのリポジトリとして管理したかったというのが1つ。もう1つは、同じアプリをメンテナンスしてると飽きちゃうし、またゼロから作りたかったからです。 余談ですが、カンファレンスアプリに必要な機能はほぼ決まっているので、モデルや画面をガチガチに固めて設定ファイルとリソースを用意するだけで作れるライブラリに切り出してもいいかもなと考えています。 Kotlin メインはKotlinではなくJavaで作っています。コトラーが「Kotlin一択
Daggerってありますよね。コンパイル時に依存性を解決するのでパフォーマンス的に有利なDIコンテナです。 https://google.github.io/dagger/ 依存関係の不備がコンパイル時にエラーになって発見できるのも、実行時にエラーが出たときの修正の難易度が高いAndroidアプリにはありがたいということで、Androidでよく使われてるようです。 基本的なオブジェクトの定義 I have a pen. public class Pen { @Override public String toString() { return "ペン"; } } I have an apple. public class Apple { @Override public String toString() { return "アッポー"; } } Ohh!!! Apple Pen!!! p
Androidその2 Advent Calendar 2016 - Qiita 2日目の記事です。 Dagger2は最初のハードルが高くてなかなか導入できなかったり、メリットがよく分からなかったりします。そういう方が雰囲気だけでも掴めれるように、簡単なサンプルを実装しながら確認できるようなのを書きました。 だいぶ長くなってしまった感じですが、あまり複雑なことはやっていないつもりです。 セットアップ build.gradle に依存関係を追加します compile 'com.google.dagger:dagger:2.7' annotationProcessor 'com.google.dagger:dagger-compiler:2.7' Hello Dagger2 すごくシンプルなサンプルです。 依存解決されるクラス まずは依存解決されるクラスを作ります。Dogクラスとします。 pub
@eaglesakura です。 結論から言うと、DIは怖くないぞ。 DI(Dependency Injection, 依存注入)は昨今のプロダクト開発では当たり前のように使われています。 DIそのものに関しての解説は参考URLを読んでください。 参考 http://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f 私自身は今年になって担当案件の開発規模が大きくなり、それに従ってUnitTestや依存関係が増えてきたことで、スマートな依存解決を求めて「どんなもんだろうな」と調べるようになりました。 遅いですか? 遅いですね。 AndroidのDIライブラリ 一般的なAndroid界隈の開発では Square/Dagger やそれをForkした Google/Dagger2 が有名です。 なぜDagger系ライブラリを使わなかったのか コードの追いづらさ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く