メソッドインジェクション
コンストラクタが利用できない場合は、メソッドインジェクションが使用できます。
Unityでの主な利用例は MonoBehaviour です。
public class SomeBehaviour : MonoBehaviour
{
float speed;
[Inject]
public void Construct(GameSettings settings)
{
speed = settings.speed;
}
}
MonoBehaviour や GameObject の管理について詳しくは MonoBehaviourへのインジェクション を参照して下さい。
Method Injection with Keys
同じインターフェイスや型の複数の実装が異なるキーで登録されている場合、メソッドパラメーターの Key 属性を使って、注入する実装を指定することができます:
public class WeaponController : MonoBehaviour
{
private IWeapon _primaryWeapon;
private IWeapon _secondaryWeapon;
[Inject]
public void Initialize(
[Key(WeaponType.Primary)] IWeapon primaryWeapon,
[Key(WeaponType.Secondary)] IWeapon secondaryWeapon)
{
_primaryWeapon = primaryWeapon;
_secondaryWeapon = secondaryWeapon;
}
}
The Key attribute also supports other key types like strings and integers:
public class GameController : MonoBehaviour
{
private IEnemy _enemy;
private ILevel _level;
[Inject]
public void Setup(
[Key("goblin")] IEnemy enemy,
[Key(1)] ILevel level)
{
_enemy = enemy;
_level = level;
}
}
注記
[Key] アトリビュートは、.Keyed()メソッドを使用して対応するキーを登録した型に使用する必要があります。詳しくはRegister with Keys セクションを参照してください。