メソッドインジェクション
コンストラクタが利用できない場合は、メソッドインジェクションが使用できます。
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 セクションを参照してください。