tech::hexagram

personal note for technical issue.

Android DI(Dependency Injection) memo

Simplenoteに転がってたメモを記事にして整理しておく。

DIとは

あるmodule Aで別のmodule Bをnewすると、module Bが変更された場合その影響を受ける。依存性をアプリケーションクラスから取り除いてプラグイン実装へと移す。依存オブジェクトを(外部から)注入することをDependency Injectionと言う。 DIの実装方法には以下の様なパターンが存在する。

コンストラクタインジェクション

public class Car {
    public Car(Engine engine, Wheel wheel) {
        mEngine = engine;
        mWheel = wheel;
    }
    ...
}

セッターインジェクション

public class Car {
    public void setEngine(Engine engine) {
        mEngine = engine;
    }
    public void setWheel(Wheel wheel) {
        mWheel = wheel;
    }
}

フィールドインジェクション

public class Car {
@Inject
/* package */ Engine mEngine;
/* package */ Wheel mWheel;
}

インタフェースインジェクション

public interface injectEngine {
    public void injectEngine(Engine engine);
}

public interface injectWheel {
    public void injectWheel(Wheel wheel);
}

public class Car implements injectEngine, injectWheel {
   private Engine mEngine;
   private Wheel mWheel;

    public void injectEngine(Engine engine) {
        this.mEngine = engine;
    }
    public void injectWheel(Wheel wheel) {
        this.mWheel = wheel;
    }
}